目录
继承
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不在同一个包下