继承中方法的覆盖重写
方法覆盖重写的注意事项; 1.必须保证父子类之间方法的名称相同,参数列表也相同。
@Override:写在方法前面,用来检测是不是有效的正确覆盖重写。这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。
2.子类方法的返回值必须【小于等于】父类方法的返回值范围。
小扩展提示:java.lang.Object类是所有类的公共最高父类(祖宗类),java.lang.String就是Object的子类。
3.子类方法的权限工须【大于等于】父类方法的权限修饰符。小扩展提示:public>protected>(default)> private备注:(default)不是关键字
default,而是什么都不写,留空。
继承中方法的覆盖重写_应用场景
//本来的老款手机
public class Phone {
public void call() {
System.out.println("打电话");
}
public void send() {
System.out.println("发短信");
}
public void show() {
System.out.println("显示号码");
}
}
//定义一个新手机,使用老手机作为父类
public class NewPhone extends Phone{
@Override
public void show() {
super.show();//把父类的show方法拿过来重复利用
//自己子类再来添加更多内容
System.out.println("显示姓名");
System.out.println("显示头像");
}
}
public class Demo01Phone{
public static void main(String[] args){
Phone phone=new Phone();
phone.call();
phone.send();
phone.show();
System.out.println("==========");
NewPhone newPhone=new
NewPhone();
newPhone.call();
newPhone.send();
newPhone.show();
}
}
继承中构造方法的访问特点
继承关系中,父子类构造方法的访问特点:
1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。
2.子类构造可以通过super关键字来调用父类重载构造。
3.super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。
总结: 子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个。
父类
public class Fu {
public Fu() {
System.out.println("父类无参构造");
}
public Fu(int num) {
System.out.println("父类有参构造!");
}
}
子类
public class zi extends Fu {
public Zi() {
super();//在调用父类无参构造方法
// super(20);
//在调用父类重载的构造方法
System.out.println("子类构造方法!");
}
public void method() {
// super();
//错误写法!只有子类构造方法,才能调用父类构造方法。
}
}
public class Demo01Constructor{
public static void main(String[] args){
Zi zi = new Zi();
}
}
super关键字的三种用法
super关键字的用法有三种:
1.在子类的成员方法中,访问父类的成员变量。
2.在子类的成员方法中,访问父类的成员方法。
3.在子类的构造方法中,访问父类的构造方法。
父类
public class Fu {
int num = 10;
public void method() {
System.out.println("父类方法");
}
}
子类
public class zi extends Fu {
int num = 20;
//在子类的构造方法中,访问父类的构造方法。
public Zi() {
super();
}
//在子类的成员方法中,访问父类的成员变量
public void methodzi(){
System.out.println(super.num);
//父类中的num
}
//在子类的成员方法中,访问父类的成员方法
public void method() {
super.method();//访问父类中的method
System.out.println("子类方法");
}
}
this关键字的三种用法
super关键字用来访问父类内容,而this关键字用来访问本类内容。用法也有三种:
1.在本类的成员方法中,访问本类的成员变量。
2.在本类的成员方法中,访问本类的另一个成员方法。
3.在本类的构造方法中,访问本类的另一个构造方法。在第三种用法当中要注意:
A.this(...)调用也必须是构造方法的第一个语句,唯一一个。
B.super和this两种构造调用,不能同时使用。
父类
public class Fu {
}
子类
public class zi extends Fu {
int num = 20;
public Zi() {
// super();
//这一行不再赠送
this(n:123);//本类的无参构造,调用本类的有参构造
//this(1, 2); // 错误写法!
}
public Zi(int n) {
this(n:1,m:2);
}
public Zi(int n, int m) {
}
public void showNum(){
int num = 10;
System.out.println(num);// 局部变量
System.out.println(this.num);//本类中的成员变量
System.out.println(super.num);//父类中的成员变量
}
public void methodA(){
System.outprintln("AAA");
}
public void methodB() {
this.methodA();
System.out.println("BBB");
}
}
super与this关键字图解
父类
public class Fu {
int num = 10;
public void method() {
System.out.println("父类方法");
}
}
子类
public class Zi extends Fu {
int num = 20;
@Override
public void method(){
super.method();// 调用了父类方法
System.out.println("子类方法");
}
public void show(){
int num = 30;
System.out.println(num);// 30
System.outprintln(this.num);//20
System.out.println(super.num);// 10
}
public class Demo {
public static void main(String[] args){
Zi zi =new Zi();
zi.show();
zi.method();
}
}
}
内存图
Java继承的三个特点