码迷,mamicode.com
首页 > 其他好文 > 详细

动手动脑四

时间:2018-11-08 13:16:03      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:div   技术   方法   col   rate   generated   代码   基类   为什么   



1.动手实验:继承条件下的构造方法调用
class
Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); }
}
class Parent extends Grandparent { public Parent() { //super("Hello.Grandparent."); System.out.println("Parent Created"); // super("Hello.Grandparent."); } } class Child extends Parent { public Child() { System.out.println("Child Created"); } } public class TestInherits { public static void main(String args[]) { Child c = new Child(); } } 复制代码

技术分享图片

通过super调用基类构造方法,必须是子类构造方法中的第一个语句。子类的构造方法在运行之前,必须调用父类的构造方法。因为子类必须继承父类的变量和方法。如果不先给父类中的变量赋值,则子类中从父类继承的变量没有赋值。所以不能反过来先给子类赋值。所以super的构造语句必须放在前面。

2..在子类中,若要调用父类中被覆盖的方法,可以使用super关键

class fu
{
    public void A()
     {
            System.out.println("Parent ");
          }
}
class zi extends fu
{
    public void A()
     {
        super.A();
        System.out.println("Child ");
      }
}
public class Test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
                    zi c = new zi();
                    c.A();
    }
}

技术分享图片

结论:

 Java“方法覆盖”的语法规则

(1)覆盖方法的允许访问范围不能小于原方法。

(2)覆盖方法所抛出的异常不能比原方法更多。

(3)声明为final方法不允许覆盖。

(4)不能覆盖静态方法。

3.下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?

m=d;

d=m;

d=(Dog)m;

d=c;

c=(Cat)m;

结论:第二句和第四句会出错

原因:父类不可直接给子类赋值,子类可以直接给父类赋值,同为子类不能相互赋值,父类可强制类型转换给子类赋值

4.技术分享图片

技术分享图片

 

动手动脑四

标签:div   技术   方法   col   rate   generated   代码   基类   为什么   

原文地址:https://www.cnblogs.com/love-nan/p/9928383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!