Java面向对象学习笔记-----继承

夏果果 21天前 ⋅ 105 阅读

继承主要解决的问题就是:共性抽取。

继承关系当中的特点:

1,子类可以拥有父类的“内容”

2.子类还可以拥有自己专有的内容。

 

继承的格式
定义父类的格式: (一个普通的类定义)

public class 父类名称{

}

定义子类的格式

public class子类名称extends 父类名称{

}

 

继承中成员变量的访问特点
在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式。
直接通过子类对象访问成员变量:
    等号左边是谁, 就优先用谁, 没有则向上找。
间接通过成员方法访问成员变量: | I
    该方法属于谁,就优先用谁,没有则向上找。

public class Fu {
    int numFu = 10;
    int num = 100;
    public void methodFu(){
        //因为本类当中有num,所以这里用的是本类的num
        System.out.println(num);
    }
}
public class Zi extends Fu {
    int numZi = 5;
    int num = 200;
    public void methodZi(){
        //因为本类当中有num,所以这里用的是本类的num,没有向上找
        System.out.println(num);
    }
}


public class ExtendsField {
    public static void main(String[] args) {
        Fu fu = new Fu();//创建父类对象
        System.out.println(fu.numFu);//10   只能使用父类的东西,没有任何子类类容
        System.out.println("==================");

        Zi zi = new Zi();
        System.out.println(zi.numZi);//5
        System.out.println(zi.numFu);//10
        System.out.println("==================");

        //等号左边是谁,就优先用谁
        System.out.println(zi.num);//200  //优先子类
        System.out.println(fu.num);//100  //优先父类
        System.out.println("===============");

        //这个方法是子类的,优先用子类的,没有向上找
        zi.methodZi();//200
        //这个方法是父类的,优先用父类的
        zi.methodFu();//100
    }
}

区分子类方法中三种重名变量
局部变量:           直接写成员变量名
本类的成员变量:     this.成员变量名
父类的成员变量:     super. 成员变量名

 

继承中成员方法的访问特点

在父子类的继承关系当中,创建子类对象,访问成员方法的规则:
        创建的对象是谁,就优先用谁,如果没有则向上找。

重写(Override)概念:在继承关系当中,方法的名称-样,参数列表也一样。

重写(override),方法的名称-样, 参数列表[也-样]。覆盖、覆写。

重载(Overload),方法的名称-样, 参数列表[不一样]。

方法的覆盖重写特点:创建的是子类对象,则优先用子类方法。

 

方法覆盖重写的注意事项:

1.必须保证父子类之间方法的名称相同,参数列表也相同。

   @Override.写在方法前面,用来检测是不是有效的正确覆盖重写。

   这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。

2.子类方法的返回值必须[小于等于]父类方法的返回值范围。

   小扩展提示: java. lang . object类是所有类的公共最高父类(祖宗类),java. Lang. String就是object的子类。

3.子类方法的权限必须[大于等于]类方法的权限修饰符。

  小扩展提示,public》protected 》(default) > private

  备注,(defoult)不是关键字default, 而是什么都不写,留空。

public class Fu {
    public void methodFu(){
        System.out.println("父类方法执行啦!");
    }
    public void method(){
        System.out.println("父类方法执行啦!");
    }
}
public class Zi extends Fu {
    public void methodZi(){
        System.out.println("子类方法执行啦!");
    }
@Override
    public void method(){
	super.method();
        System.out.println("子类方法执行啦!");
    }
}


public class ExtendsField {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.methodFu();//父类方法执行啦!
        zi.methodZi();//子类方法执行啦!

        //创建的是new的子类对象,所以优先用子类方法
        zi.method();	   //父类方法执行啦!
              		  //子类方法执行啦!
    }
}

 

 

全部评论: 0

    我有话说: