继承与多态的难点解析

本文深入探讨了Java中的继承概念,包括显示与隐式继承、权限等级、protected关键字的使用、super关键字的应用以及final关键字的作用。此外,还详细解释了构造块、构造方法的执行顺序和Object类的toString()及equals()方法。在多态部分,文章阐述了多态的概念、好处以及实现方式,强调了方法重载和重写的重要性。
摘要由CSDN通过智能技术生成

继承

1. 显示继承与隐式继承

子类会继承父类的所有方法和属性,包括private属性。

  • 显示继承:子类继承父类的public方法和属性,且可直接通过子类对象调用父类的public属性或方法。

  • 隐式继承:子类也继承了父类的private方法和属性,但不可直接通过子类对象调用父类属性和方法。
    -> 可以在父类中提供public方法,在该方法中调用父类的private属性/方法。再由子类对象调用该public方法,以此间接调用父类的private属性或方法。
    如:age属性为private权限,子类无法直接访问,但通过设置public权限的getAge()方法供子类对象调用,可访问到age属性。


2. 权限等级

public > protected > default(包访问权限)> private


3. protected关键字

测试用例:父类Animal和子类Person不在同一个包中,两个Test类代码相同,都是通过子类对象访问父类的protected属性age。
在这里插入图片描述
Animal.Animal:

public class Animal {
     //父类
    protected int age = 18;  
}

Animal.Test:

public class Test {
     //与Animal在同一个包下
    public static void main(String[] args) {
   
        Animal a = new Animal();
        System.out.println(a.age);
        Person p = new Person();
        System.out.println(p.age);  //编译通过,Test与Animal在同一个包下,可访问protected权限的属性
    }
}

Person.Person:

public class Person extends Animal {
     //子类,与父类不同包
    public static void main(String[] args) {
   
        Person p = new Person();
        System.out.println(p.age);  //编译通过,子类中可以直接访问父类protected权限的属性
    }
}

Person.Test:

public class Test {
   
    public static void main(String[] args) {
   
        Person p = new Person();
        System.out.println(p.age);  //编译不通过,Test与Animal不在同一个包下
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值