动手动脑4
Posted birdmmxx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动手动脑4相关的知识,希望对你有一定的参考价值。
1.
class Grandparent { public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); } public Grandparent() { System.out.println("GrandParent Created."); } } 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(); } }
运行结果:
GrandParent Created.
Parent Created
Child Created
总结:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。
不可以反过来,因为子类实例化默认先调用父类的构造。若子类定义了自己的构造方法,它先执行继承自父类的无参数构造方法,再执行自己的构造方法。子类构造方法没有显式调用父类构造方法,而父类又没有无参构造方法时,则编译出错。
2.
public class ExplorationJDKSource { /** * @param args */ public static void main(String[] args) { System.out.println(new A()); } } class A{}
显示结果:
总结:不是很确定。。。
最后调用的是A()的默认构造函数,在A()类中计算机生成了一个默认构造函数。
3.
public class ShowArea { public void shouArea() { } public static void main(String [] args) { @SuppressWarnings("unused") Rectangle s1=new Rectangle(); s1.showArea(); @SuppressWarnings("unused") Square s2=new Square(); s2.showArea(); @SuppressWarnings("unused") Circle s3=new Circle(); s3.showArea(); } } abstract class Shape{ abstract double showArea(); } class Rectangle extends Shape{ double a=2,b=3; @Override double showArea() { double s=a*b; System.out.println("矩形的面积:"+s); return s; } } class Square extends Shape{ double a=2; double showArea() { double s=a*a; System.out.println("正方形的:"+s); return s; } } class Circle extends Shape{ double raduis=2; double showArea() { @SuppressWarnings("unused") double s=3.14*raduis*raduis; System.out.println("圆的面积:"+s); return 0; } }
运行结果:
矩形的面积:6.0 正方形的:4.0 圆的面积:12.56
总结:用方法重载实现覆盖父类。
4.
public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printValue(); ((Child)parent).myValue++; parent.printValue(); } } class Parent{ public int myValue=100; public void printValue() { System.out.println("Parent.printValue(),myValue="+myValue); } } class Child extends Parent{ public int myValue=200; public void printValue() { System.out.println("Child.printValue(),myValue="+myValue); } }
运行结果:
Parent.printValue(),myValue=100 Child.printValue(),myValue=200 Child.printValue(),myValue=200 Child.printValue(),myValue=200 Child.printValue(),myValue=201
总结:当父类和子类有同样的方法时,对象是谁的,就调用谁的方法。
以上是关于动手动脑4的主要内容,如果未能解决你的问题,请参考以下文章