第八谈:继承

本文详细阐述了Java中的继承概念,包括继承的定义、优点(提高复用性和维护性)、注意事项(如构造方法限制、单一继承等)、this和super的用法以及初始化过程。还介绍了子类与成员变量、方法的交互关系,以及方法重写的概念。
摘要由CSDN通过智能技术生成

一、继承

继承:java针对多个类中有相同的部分的话,可以将相同的部分提取出来,单独放到一个类中A,然后其他类与这个A类产生一个关系,这样的话,其他的类中就有了A类中的属性或行为。这个关系叫做继承,java提供了一个关键字extends来表示继承关系

继承的好处:
1.提高了代码的复用性:多个类相同的成员可以放到同一个类中。
2.提高了代码的维护性:如果功能的代码需要修改,修改一处即可。
3.让类与类之间产生了关系,是多态的前提:这也是继承的一个弊端(类的耦合性很强)。

注意事项:

1.子类无法继承父类中的构造方法。

2.java中的类与类之间的继承,不允许出现子类同时继承多个父类的情况,只允许单继承

3.Java中的类与类之间的继承,运行多重继承,形成继承体系。

4.java中子类无法继承父类中的私有成员。

5.不要为了部分功能而去继承。

二、this和super

继承与成员变量的关系:就近原则
用法:
访问成员变量:
this.成员变量       super.成员变量
访问构造方法(子父类的构造方法问题):
this(……)        super(……)
访问成员方法()
this.成员方法()     super.成员方法()

例子
class Fu2{
    int a = 10;

    public void show1(){
        int a = 40;
    }
}

class Zi2 extends Fu2{
    int a = 20;
    public void fun1(){ // 无法访问到父类中方法中的变量
        int a = 30;
        System.out.println(a); // 获取的是当前方法中的局部变量a:30
        //需求1:在不创建对象的前提下获取子类中成员变量a:20
        System.out.println(this.a);
        //需求2:在不创建父类对象的前提下获取父类中成员变量a:10
        //java提供了一个关键字表示父类的引用:super
        //将来在子类中可以使用super关键字调用父类中的所有非私有的成员
        System.out.println(super.a);
    }
}

public class ExtendsDemo3 {
    public static void main(String[] args) {
        Zi2 zi2 = new Zi2();
        zi2.fun1();
    }
}

三、初始化

1.要想初始化子类,必须先初始化其直接父类。

2.子类的构造方法第一句话默认是super()。

3.java中的类只能进行一次初始化,不允许重复初始化。

class Fu3 {
//    Fu3(){
//        System.out.println("这是父类中的无参构造方法。。。");
//    }
    Fu3(String s) {
        System.out.println("数加 " + s);
    }
}
class Zi3 extends Fu3 {
    Zi3() {

        //方案1:当父类中没有无参构造方法的时候,使用super关键字调用其直接父类中的其他构造方法,完成父类初始化
//        super("java");
//        super();  // Fu3();

        //方案2:间接地调用父类的有参构造方法,完成父类的初始化
        this("java");

        System.out.println("这是子类中的无参构造方法。。。");
//        super();  // 不允许重复初始化
    }

    Zi3(String s){
        super(s);
        System.out.println("这是子类中的有参构造方法。。。");
    }
}

public class ExtendsDemo4 {
    public static void main(String[] args) {
        Zi3 zi3 = new Zi3();
    }
}

四、继承与成员方法的关系

1.子类访问成员变量方法遵循就近原则。

2.方法的重写(子类中出现了和父类中一模一样的方法声明(返回值类型,方法名,参数列表都和父类一模一样))。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值