Java---类的继承

文章目录

    • 1. 理解继承
    • 2. 继承概述
    • 3. 代码块理解
    • 4. 继承的好处与弊端
    • 5. 继承中变量的访问特点
    • 6. super关键字
    • 7. 继承中构造方法访问特点
    • 8. 继承中成员方法访问特点
    • 9. 方法重写
    • 10. 方法重写注意事项
    • 11. Java继承注意事项


1. 理解继承

Java---类的继承_第1张图片

Java---类的继承_第2张图片

2. 继承概述

 1. 继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。

 2. 继承格式:public class 子类名 extends 父类名 {}。例如:public class Zi extends Fu {}

  • Fu:是父类,也被称为基类和超类。
  • Zi:是子类,也被称为派生类。

 3. 继承中子类的特点:(1) 子类可以有父类的内容。 (2) 子类还可以有自己特有的内容。

3. 代码块理解

public class Fu {
    public void show(){
        System.out.println("show方法被调用");
    }
}
public class Zi extends Fu {
    public void method(){
        System.out.println("method方法被调用");
    }
}
public class Demo {
    public static void main(String[] args) {
        Fu f=new Fu();
        f.show();
        Zi z=new Zi();
        z.method();
        z.show();
    }
}

Java---类的继承_第3张图片

4. 继承的好处与弊端

 1. 好处:(1) 提高了代码的复用性(多个类相同的成员可以放到同一个类中)。 (2) 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)。

 2. 弊端:继承让类与类之间产生了关系,类的耦合性增强了,当父类发送变化时,子类实现也不得不跟着变化,削弱了子类的独立性。

 3. 继承的体现关系:is a。即什么是什么的一种,如苹果是水果的一种,猫是动物的一种。

5. 继承中变量的访问特点

 在子类方法中访问一个变量,顺序为:

  • 在子类局部范围找。
  • 在子类成员范围找。
  • 在父类成员范围找。
  • 如果都没有就报错。
public class Fu {
    public int age=30;
}


public class Zi extends Fu {
    public int height=180;
    public void  show(){
        System.out.println(age);
        System.out.println(height);
    }
}


public class Demo {
    public static void main(String[] args) {
        Zi z=new Zi();
        z.show();  //输出为30、180
    }
}
public class Fu {
    public int age=30;
}


public class Zi extends Fu {
    public int height=180;
    public int age=20;
    public void  show(){
        System.out.println(age);
        System.out.println(height);
    }
}


public class Demo {
    public static void main(String[] args) {
        Zi z=new Zi();
        z.show(); //输出为20、180
    }
}
public class Fu {
    public int age=30;
}


public class Zi extends Fu {
    public int height=180;
    public int age=20;
    public void  show(){
        int age=40;
        System.out.println(age);
        System.out.println(height);
    }
}


public class Demo {
    public static void main(String[] args) {
        Zi z=new Zi();
        z.show(); //输出为40、180
    }
}

6. super关键字

关键字 访问成员变量 访问构造方法 访问成员方法
this this.成员变量,访问本类成员变量 this(…),访问本类构造方法 this.成员方法(…),访问本类成员方法
super super.成员变量,访问父类成员变量 super(…),访问父类构造方法 super.成员方法(…),访问父类成员方法
public class Fu {
    public int age=20;
}


public class Zi extends Fu {
    public int age=30;
    public void  show(){
        int age=40;
        System.out.println(age);       //40
        System.out.println(this.age);  //30
        System.out.println(super.age); //20
    }
}


public class Demo {
    public static void main(String[] args) {
        Zi z=new Zi();
        z.show();
        //输出结果为40、30、20
    }
}

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

 1. 子类中所有的构造方法默认都会访问父类中无参的构造方法。

  • 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
  • 每一个子类构造方法的第一条语句默认都是:super()

 2. 如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?(此时super()不起作用)

  • 通过使用super关键字去显示地调用父类的带参构造方法。
  • 在父类中自己提供一个无参构造方法。
public class Fu {
    public Fu(){
        System.out.println("Fu类中无参方法调用");
    }
    public Fu(int age){
        System.out.println("Fu类中带参方法调用");
    }
}

public class Zi extends Fu {
    public Zi(){
        System.out.println("Zi类中无参方法调用");
    }
    public Zi(int age){
        System.out.println("Zi类中带参方法调用");
    }
}

public class Demo {
    public static void main(String[] args) {
        Zi z1=new Zi();

        Zi z2=new Zi(20);
    }
}

Java---类的继承_第4张图片

public class Zi extends Fu {
    public Zi(){
        //super()
        super(20);
        System.out.println("Zi类中无参方法调用");
    }
    //super()
    public Zi(int age){
        //super()
        super(20);
        System.out.println("Zi类中带参方法调用");
    }
}

Java---类的继承_第5张图片

8. 继承中成员方法访问特点

 继承中通过子类访问一个方法,顺序为:

  • 先在子类成员范围找。
  • 再在父类成员范围找。
  • 如果都没有就报错。
public class Fu {
    public void show(){
        System.out.println("Fu类中show方法调用");
    }
}

public class Zi extends Fu {
    public void method() {
        System.out.println("Zi类中method方法调用");
    }
    public void show(){
        super.show();
        System.out.println("Zi类中show方法调用");
    }
}

public class Demo {
    public static void main(String[] args) {
        Zi z=new Zi();
        z.method();
        z.show();
    }
}

Java---类的继承_第6张图片

9. 方法重写

 1. 方法重写概述:子类中出现了和父类中一模一样的方法声明。

 2. 方法重写应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,既沿袭了父类的功能,又定义了子类特有的内容。

 3. @Override:是一个注解,可以帮助我们检查重写方法的方法声明的正确性。

public class Phone {
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }
}

public class NewPhone extends Phone{
    @Override
    public void call(String name) {
        System.out.println("先开启视频");
        super.call(name);
    }
}

public class Demo {
    public static void main(String[] args) {
        Phone ph=new Phone();
        ph.call("张三"); //注意加双引号
        System.out.println("--------");
        NewPhone p=new NewPhone();
        p.call("张三");  //注意加双引号
    }
}

Java---类的继承_第7张图片

10. 方法重写注意事项

 父类中的私有方法不能被重写(父类的私有成员子类是不能继承的)。子类方法的访问权限不能更低(public>默认>私有)。

11. Java继承注意事项

 Java中类只支持单继承,不支持多继承。Java中类支持多层继承。

Java---类的继承_第8张图片

Java---类的继承_第9张图片

你可能感兴趣的:(Java学习,java,开发语言,继承)