JAVA单排日记-2019/10/18-继承

1.继承中类的成员变量

  • 父类成员变量与子类成员变量同名情况,访问规则
  1. 直接访问:直接通过子类对象访问成员变量
    规则:等号左边是谁,就优先用谁,没有则向上找。(成员方法同名同理)
Fu fu = new Fu();
Zi zi = new Zi();
zi.num 优先用Zi类
fu.num 优先用fu类
  1. 间接访问:间接通过成员方法访问成员变量
    规则:子类中的方法使用子类中的成员变量,父类中的方法使用父类中的成员变量

2.继承中类的成员变量与局部变量

  • 父类成员变量、子类成员变量、子类局部变量同名情况

父类:

public class Fu {
    int num = 10;
    }
}

子类:

public class Zi extends Fu {
    int num = 30;

    public void metho() {
        int num = 20;
        System.out.println(num);        20
        System.out.println(this.num);   30
        System.out.println(super.num);  10
    }
}

3.继承中方法覆盖重写

  • 子类对父类的方法进行覆盖重写
  1. 覆盖重写注意事项

JAVA单排日记-2019/10/18-继承_第1张图片

  1. 覆盖重写应用场景
    JAVA单排日记-2019/10/18-继承_第2张图片

代码实现:
首先定义一个父类,代表旧手机

public class OldPhone {
    public void call(){
        System.out.println("打电话");
    }

    public void massage(){
        System.out.println("发短信");
    }

    public void callId(){
        System.out.println("来电显示");
    }
}

然后定义一个子类代表新手机,新手机需要继承父类的某些功能,并且对其中的一些功能进行覆盖重写

public class Newphone extends OldPhone{
    @Override // 用来检测重写是否成功
    public void callId(){
        System.out.println("来电显示");
        System.out.println("用户名称");
        System.out.println("用户头像");
    }
}

用关键字super优化子类覆盖重写代码:

public class Newphone extends OldPhone{
    @Override // 用来检测重写是否成功
    public void callId(){
        super.callId();//将父类的有用项重新利用
        System.out.println("用户名称");
        System.out.println("用户头像");
    }
}

调用

public class DemoPhone {
    public static void main(String[] args) {
        Newphone phone = new Newphone();
        phone.call();
        phone.massage();
        phone.callId();
    }
}

JAVA单排日记-2019/10/18-继承_第3张图片

4.继承中的构造方法访问特点

  1. 子类构造方法中有一个默认的隐含的super()调用,所以一定是先调用父类构造方法,再执行子类构造。
public class Fu {
    public Fu(){
        System.out.println("父类构造方法!");
    }
}
public class Zi extends Fu{
    public Zi(){
    	//隐藏默认项 super();
        System.out.println("子类构造方法");
    }
}
public class DemoMethod {
    public static void main(String[] args) {
        Zi zi = new Zi();
    }
}

在这里插入图片描述

  1. 可以通过关键字super关键字来调用父类重载构造
public class Fu {
    public Fu(){
        System.out.println("父类构造方法!");
    }

    public Fu(int a){
        System.out.println("父类有参构造方法!"+a);
    }
}
public class Zi extends Fu{
    public Zi(){
        super(19);
        System.out.println("子类构造方法");
    }
}
public class DemoMethod {
    public static void main(String[] args) {
        Zi zi = new Zi();
    }
}

在这里插入图片描述

  1. super的父类构造调用,必须是子类构造方法的第一个语句

你可能感兴趣的:(Java)