public class A {
private int a=15;
private void fAs() {
System.out.println(a+"这是父类的私有方法FAs()");
}
public void fA() {
System.out.println("这是父类的方法FA()");
}
}
public class B extends A {
public void fB() {
System.out.println("这是子类的方法FB()");
}
@Test
public void init() {
System.out.println("这是子类的自定义方法");
A a1=new A();
a1.fA();//new父类
// a1.fAs();//其它类中不能直接访问
A a2=new B();//向上造型,父类的引用对象必须要由子类实例化的
a2.fA();
//a2.FB();//错误,向上造型,只能调用父类方法
B b1=(B)a2;//向下造型,前提:必须先向上造型获得父类引用对象,然后通过强制类型转换获得子类属性
b1.fA();
b1.fB();
//B b2=new A();//错误, 子类对象不能由父类对象实例化
B b3=new B();
b3.fA();
b3.fB();
System.out.println(b3.b);//本类中访问本类私有变量
}
}
向上造型后 子类 将不再具备其自己定义的方法,只有父类的方法。但若重写了父类的方法,向上造型的对象的方法为重写后新的方法。
向下造型:
类的继承:
·子类继承父类(可以将不同方法共同部分提取到父类中,减少代码复用)
·子类通过super();访问父类构造方法(构造方法不能被继承,但是可以被访问)
·继承可以获得父类的公有变量和公有方法(私有方法和变量不能被继承直接访问,但是可以通过公有方法间接访问)
·私有变量和方法只能在当前类中可以通过对象直接访问,在其它类中不能通过对象直接访问(在其它类中可以通过对象访问公有方法间接访问)
权限控制表
同一个包的类:同一个package下的类
·继承的目的可以增加父类的属性和方法(增加功能)
·子类可以重写父类的方法,重写之后,如果父类对象由子类实例化,或者子类对象由子类实例化,父类方法将被覆盖(方法覆盖)
(1)父类对象可以由它本身实例化
A a=new A();
父类方法不被覆盖
不可直接访问父类的私有方法或者变量
(2)父类对象可以由子类实例化
A a=new B();
1、向上造型:
父类的引用对象必须要由子类实例化的
向上造型,只能调用父类方法
注意:向上造型后,子类不在具备自己定义的方法,
但是,如果重写了父类方法,对象获得的方法将覆盖父类的方法
(提取共同部分,向上造型实例化不同对象存到父类对象数组,子类重写父类方法得到对应不同结果)
2、向下造型:
前提:必须先向上造型获得父类引用对象
才能通过强制类型转换获得子类属性
A a=new B();
B b=(B)a;
父类方法将被覆盖
不可直接访问父类的私有方法或者变量
(3)子类对象不能由父类对象实例化
B b2=new A();//错误
(4)子类对象可以由子类实例化
B b=new B();
父类方法将被覆盖
不可直接访问父类的私有方法或者变量