1.继承的概念

让类与类之间产生父子关系

2.继承的好处与弊端

好处:
(1)提高代码复用性
(2)提高代码维护性
(3)类与类产生关系是多态的前提
弊端:
增强了类的耦合性

3.开发的原则

高内聚,低耦合
内聚:自己及完成某件事的能力
耦合:类与类之间的关系

4.Java类继承的特点

Java只支持单继承不支持多继承,但支持多层继承

5.继承的注意事项

(1)子类只能继承父类所有非私有的成员
(2)子类不能继承父类的构造方法但能通过super关键字去访问
(3)继承关系必须是A是B的一种或者B是A的一种

6.继承中成员变量之间的关系

(1)不同名的变量
(2)同名的变量(就近原则,子类有的变量不用父类)

7.this 与super的区别

this:当前对象的引用
super:当前对象父类的引用
(1)调用成员变量:
this.成员变量:调用本类成员变量(当本类没有时,也可以调用父类成员方法)
super.成员变量:调用父类的成员变量
(2)调用构造方法

  • 子类中所有构造方法都会默认访问父类中空参的构造方法(因为子类会继承父类中的数据,可能使用父类中的数据,所以在子类进行数据初始化之前,一定先完成父类数据的初始化)
  • 在子类的构造方法前系统会默认加上super() [父类的空参构造的方法]
  • object是最顶层类
  • 当父类没有空参构造时:
    (1)可以在子类的无参构造方法中添加本类或者父类的有参构造方法
    (2)可以在子类有参的构造方法中添加父类的有参构造方法
    例:
    使用this 关键字时要注意在程序执行时先调用子类自己的有参构造,通过子类的有参构造访问父类的有参构造再依次执行剩余语句
class Father {
    private String name;
    private int age;
    public Father(String name,int age) {
        this.age = age;
        this.name = name;
    }
}
class Son extends Father {
    public Son() {
        //super("李四",24);
        this("李四",24);
    }
    public Son(String name, int age) {
        super(name, age);
    }
}
  • this与super语句必须是构造语句的第一句(且两者只能存在一个)
8.经典例题:

在有静态代码块的情况下,静态代码块随着类加载,最先输出
有父类的情况下,在加载时会先将父类加载进内存,在加载子类

class C {
    public C() {
        System.out.println("C构造方法");
    }
    static {
        System.out.println("你好啊!");
    }
}
 class HelloA {
    //构造方法
    public HelloA(){
        System.out.println("Hello A!父类构造方法");
    }
    //非静态代码块
    {
        System.out.println("i am A class.父类非静态代码块");
    }
    //静态代码块
    static {
        System.out.println("static A 父类静态代码块");
    }
}
class Main extends HelloA {
    //构造方法
    public Main() {
        System.out.println("Hello B!子类构造方法");
    }

    //非静态代码块
    {
        System.out.println("i am B class.子类非静态代码块");
    }

    //静态代码块
    static {
        System.out.println("static B 子类静态代码块");
    }

    public static void main(String[] args) {
        System.out.println("======start=========");
        new HelloA();
        new Main();
        new C();
        System.out.println("========end===========");
    }
}

输出结果

java中使用继承权的优势 java继承有哪些优点和缺点_父类


结果分析:

(1)主类静态代码块随着类的加载而加载,优先于主方法

(2)非主类的代码块优先于非静态代码块,但不优先于主方法

(3)静态代码块只执行一次

(4)非静态代码块优先于构造方法

(5)父类方法优先于子类

4.代码块的优先顺序

(1)静态代码块>构造代码块>构造方法
(2)父类>子类

5.继承中成员方法关系(子类对象调用方法先找子类再找父类)

(1)成员方法名称不同时:直接调用
(2)成员方法名称相同时:子类对父类方法进行重写(覆盖)
但是依然可以采用super.成员方法来执行父类的成员方法

  • 方法重写:
    (1)概念:子父类出现一模一样的方法(返回值类型可以是引用数据类型中的子父类关系)
    (2)应用场景:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。
    类如:手机发送短信功能,其他功能仍然需要,但发送字体需要做出调整,可以使用新类继承父类,但重写父类中关于短信字体的方法。
    (好处:可以使用原来的功能,而且可以通过super继续使用旧版本的字体)
    (3)方法重写的注意事项:
  • 父类中私有的方法不能被重写(因为子类无法继承父类中被私有的成员)
  • 子类重写父类方法访问权限不能更低(最好访问权限相同)
  • 父类的静态方法子类也必须是静态的(静态只能覆盖静态,算不上方法重写)
  • 子类重写父类方法时,最好声明一模一样
6.方法重写与方法重载
  • 区别:方法重载可以改变返回值类型,方法重载发生在一个类中,方法重写发生在继承类中
  • 方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
  • 方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关