动手动脑四
Posted love-nan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动手动脑四相关的知识,希望对你有一定的参考价值。
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.
以上是关于动手动脑四的主要内容,如果未能解决你的问题,请参考以下文章