2016.10.11继承和多态

继承:

父类可以是实现类也可以是抽象类

方法:

子类拥有父类的所有方法,可以重写父类的方法,

当父类中有抽象方法,必须重写@Override该方法

属性:

但不能拥有父类的属性


类的多态:

(1) Fu f = new Zi();父类引用指向子类对象。基于继承或实现(即方法的重写)

构造器:

* 无论new的是子类的有参还是无参对象,都将先调用父类的无参构造

方法:

子类中有方法就调用子类的方法,

子类中没有方法,就调用父类的方法,

如果调用父类中没有但子类中有的方法,将会出现编译期异常

属性:

* 因为继承不会传递属性,所以父类的引用调用的还是父类的属性,而不是子类的

(2)Zi zi = (Zi) new Fu();编译期没有问题,但会有运行时异常,ClassCastExecption

public class Fu {

         String s = "Fu的参数s";

         public Fu(){

                   System.out.println("Fu的空构造");

         }

         public Fu(Strings){

                   System.out.println("Fu的带参构造,打印s="+s);

         }

         void m_a(){

                   System.out.println("Fu的方法a");

         }

        

         void m_b(){

                   System.out.println("Fu的方法b");

         }

}

public class Zi extends Fu{

         String s = "Zi的参数s";

         public Zi() {

                   System.out.println("Zi的空构造");

         }

         public Zi(Strings) {

                   System.out.println("Zi的带参构造,打印s=" +s);

         }

         void m_a() {

                   System.out.println("Zi的方法a");

         }

         void m_c() {

                   System.out.println("Zi的方法c");

         }

}

public class Test {

         public static void main(String[] args) {

                   Fu fu = new Zi();//调用父类的空构造器,子类的空构造器

                   fu.m_a();

                   fu.m_b();//父类的引用掉用方法:如果子类中有这个方法,将调用子类的;如果子类没有这个方法,将调用父类的;如果父类中没有这个方法,但子类中有,将编译错误

                   //fu.m_c();

//The System class contains several useful class fieldsand methods. It cannot be instantiated.

                   System.out.println(fu.s);//父类引用获取变量,将获取父类的

                   System.out.println("---------------------------------------");

                   Zi zi = new Zi();

                   zi.m_a();

                   zi.m_b();

                   zi.m_c();//子类的引用调用方法:如果子类中有这个方法,将直接调用子类的;如果子类中没有这个方法,将调用父类的

                   System.out.println(zi.s);//子类引用获取变量,将获取子类的

                   System.out.println("----------------------------------------");

                   Fu fu2 =new Zi("str");//调用父类的功构造器,子类的带参构造器

System.out.println("----------------------------------------");

                   Zi zi2 = (Zi)new Fu();//运行时异常ClassCastExecption,但是还是会调用父类的空构造器

                   zi2.m_a();

                   zi2.m_b();

                   zi2.m_c();

                   System.out.println(zi2.s);

                  System.out.println("-----------------------------------------");

                   Zi zi3 = (Zi)new Fu("str");//运行时异常ClassCastExeception,但是会调用父类的带参构造器

         }

}

Fu的空构造

Zi的空构造

Zi的方法a

Fu的方法b

Fu的参数s

---------------------------------------

Fu的空构造

Zi的空构造

Zi的方法a

Fu的方法b

Zi的方法c

Zi的参数s

----------------------------------------

Fu的空构造

Zi的带参构造,打印s=str

Fu的空构造

Exception in thread "main" java.lang.ClassCastException:Test.polymorphic_1.Fu cannot be cast to Test.polymorphic_1.Zi

         atTest.polymorphic_1.Test.main(Test.java:19)

-----------------------------------------

Fu的带参构造,打印s=str

Exception in thread "main" java.lang.ClassCastException:Test.polymorphic_1.Fu cannot be cast to Test.polymorphic_1.Zi

         atTest.polymorphic_1.Test.main(Test.java:25)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值