继承的理解

1.什么是继承,了解继承中构造器的使用

对继承的理解

  • 继承是子类调用父类的属性和方法,在java中通过extends关键字实现。
  • 子类不能调用父类private修饰的属性和方法;
  • 继承是类与类之间的一种关系;
  • 一个子类只能继承一个父类,一个父类能被多个子类继承;
  • 子类与父类是is a的关系;

继承中构造器的使用

在具有继承关系对象的创建过程中,构建子类对象会先构建父类对象,先走父类构造器。

super():表示调用父类无参构造方法,如果没有显示书写,则默认隐式存在于子类构造方法的首行

public class Test {
    public static void main(String[] args) {
        new C();
    }
}
class A{
    public A(){
        System.out.println("A");
    }
}
class B extends A{
    public B(){
        super();
        System.out.println("B");
    }
}
class C extends B{
    public C(){
        super();
        System.out.println("C");
    }
}

如果父类没有显示的无参构造方法时,子类继承父类,则需要在子类构造器中调用父类的有参构造方法;

class A{
    public A(String A){
        System.out.println("A");
    }
}
class B extends A{
    public B(){
        super(null);
        System.out.println("B");
    }
}

2.理解this和super关键字

this关键字

类是模板,可服务于此类的所有对象;this代表当前实例,是类中的默认引用;当类服务于某个对象时,this则指向这个对象

//当创建s1对象时,this指向0x0000AO01,访问的name属性即是Ox0000A001地址中的name空间;
//当创建s2对象时,this指向Ox0000B002,访问的name属性即是Ox0000B002地址中的name空间;

public class Test {
    public static void main(String[] args) {
        Teacher s1 = new Teacher();
        s1.sayHi();
        Teacher s2 = new Teacher();
        s2.sayHi();
    }
}

class Teacher{
    String name;
    public void sayHi(){
        System.out.println(this.name);
    }
}

this的两种用法

  • 通过this. 调用实例属性、方法;
  • 通过this(),this(实参)调用其他构造函数;

**注意:**构造器在调用其他构造器的时候要放在构造器的首行,还要防止构造递归,造成死循环。

Super关键字

在子类中可直接访问父类的属性和方法,当子类中的属性和方法与父类发生遮蔽和重写,需要加以区分,才可以专项访问。

public class TestSuperKeyword i
public static void main(String[] args) {
    B b = new B();
    b.print();
    }
}
class A{
    int value = 10;
}
class Bextends A{
    int value = 20;
public void print(){
    int value = 30;
    System.out.print1n(value);
    System.out.print1n(this.value);System.out.print1n(super.value);
    }
}
//运行结果30 20 10
//父子类属性同时存在不存在重写,子类遮蔽父类属性,需要使用不同前缀进行访问。

子类的默认无参构造器默认隐藏super()先执行父类的无参构造器。super()默认放在第一行。

super关键字的用法

1.第一种用法

  • 在子类方法中使用super. 的形式访问父类的属性和方法;
  • 例如super.父类属性, super.父类方法;

2.第二种用法

  • 在子类的构造方法的首行,使用super() super(实参),调用父类构造方法;

为什么this和super不能同时存在

如果一个类继承了其他类,那当初始化时super会默认调用父类的无参构造方法,或super调用有参的构造方法,然后再完成子类特有属性的初始化。而在构造函数中,this调用的是其他构造函数,而其他构造函数中也有super存在,这样就存在两个super,意味着父类的两次初始化,这不安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值