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

动手动脑4

时间:2018-11-07 23:07:58      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:xtend   通过   调用   继承   col   类实例化   creat   ESS   pre   

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@15db9742

总结:不是很确定。。。

最后调用的是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

标签:xtend   通过   调用   继承   col   类实例化   creat   ESS   pre   

原文地址:https://www.cnblogs.com/birdmmxx/p/9926196.html

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