继承
继承是多态的前提,没有继承就没有多态
子类可以拥有父类的内容
子类还可以拥有自己专属的内容
定义父类格式(一个普通的父类其实就是一个类)
public class 父类名称 { }
定义子类名称(就是子类名称后面加上一个extends父类名称)
public class 子类名称 extends父类名称{ }
再父子类的关系继承中,如果出现成员变量重名,则创建子类对象时有两种访问方式:
直接通过子类对象访问成员变量 (等号左边是谁就优先用谁,没有则往上找)
间接通过成员方法访问成员变量 (该方法属于谁就优先用谁)
区分子类中方法重名三种
局部变量:直接写成员变量名
本类的成员变量名:this.成员变量名
父类的成员变量名:super.成员变量名
在父子类的关系当中,创建子类对象,访问成员方法的规则
创建对象是谁就优先用谁,没有则向上找
重写【override】
重写:方法的名称一样,参数列表【也一样】 覆盖 覆写
重载:方法的名称一样,参数列表【不一样】
方法覆盖重写特点:创建的是子类对象,则优先用子类方法
方法重写的注意事项
必须保证父子类的方法名称和方法参数相同
@Override 写在方法前用来检测是否是有效的覆盖重写
这个注解就算不写只要满足条件也是正确的
子类方法的返回值必须【小于等于】父类方法返回值的范围
子类方法权限必须【大于等于】父类方法权限修饰符
super();用于子类调用父类的构造方法
public Zl() { super(); }
三种用法
在子类成员方法中,访问父类成员变量
在子类成员方法中,访问父类成员方法
在子类构造方法内,访问父类构造方法
必须是第一个
this()用于访问本类的内容
在本类的成员方法中访问本类的成员变量
public void mete(){ System.out.println(this.num);
在本类的成员方法中访问本类的另一个成员方法
public void mate1(){ System.out.println("AAA"); } public void mate2(){ this.mate1(); System.out.println("BBB"); }
在本类的构造方法中访问本类的另一个构造方法
public Zl() { this(12); } public Zl(int num) { this.num = num; }
}
this调用也必须是第一个也是唯一一个 不能和super方法同时使用