Java 类的继承

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();访问父类构造方法(构造方法不能被继承,但是可以被访问)

·继承可以获得父类的公有变量和公有方法(私有方法和变量不能被继承直接访问,但是可以通过公有方法间接访问

·私有变量和方法只能在当前类中可以通过对象直接访问,在其它类不能通过对象直接访问(在其它类中可以通过对象访问公有方法间接访问

权限控制表

Java 类的继承_第1张图片

同一个包的类:同一个package下的类

·继承的目的可以增加父类的属性和方法(增加功能)

·子类可以重写父类的方法,重写之后,如果父类对象由子类实例化,或者子类对象由子类实例化,父类方法将被覆盖(方法覆盖)

1父类对象可以由它本身实例化

A a=new A();

父类方法不被覆盖

不可直接访问父类的私有方法或者变量

2父类对象可以由子类实例化

A a=new B();

1、向上造型:

父类的引用对象必须要由子类实例化的

向上造型,只能调用父类方法

注意:向上造型后,子类不在具备自己定义的方法,

但是,如果重写了父类方法,对象获得的方法将覆盖父类的方法

(提取共同部分,向上造型实例化不同对象存到父类对象数组,子类重写父类方法得到对应不同结果)

Java 类的继承_第2张图片

2、向下造型:

前提:必须先向上造型获得父类引用对象

才能通过强制类型转换获得子类属性

A a=new B();

B b=(B)a;

父类方法将被覆盖

不可直接访问父类的私有方法或者变量

3子类对象不能由父类对象实例化

B b2=new A();//错误

4子类对象可以由子类实例化

B b=new B();

父类方法将被覆盖

不可直接访问父类的私有方法或者变量

 

你可能感兴趣的:(Java基础,Java,类的继承,向上造型,向下造型)