Skip to content

Latest commit

 

History

History
144 lines (108 loc) · 2.65 KB

File metadata and controls

144 lines (108 loc) · 2.65 KB

Super 程序题

题目一

class Base{
    Base(){
        System.out.println("Base");
    }
}

public class Checket extends Base{
    Checket(){
        System.out.println("Checket");
        super();
    }
    public static void main(String argv[]){
        Checket a = new Checket();
    }
}

输出是什么? 是 compile time error. super() 必须放在前面.

放在前面之后,输出为 Base Checket

题目二

import java.util.Date;

public class Test extends Date{

    public static void main(String[] args) {
       new Test().test();
    }

    public void test(){
       System.out.println(super.getClass().getName());
    }
}

返回的结果是 Test

因为super.getClass().getName() 调用了父类的 getClass() 方法, 返回当前类

如果想得到父类的名称,应该用如下代码:

getClass().getSuperClass().getName()

题目三

public abstract class Car {

    String name = "Car";

    public String getName(){
    	return name;
    }

    public abstract void demarre();
}

public class B extends Car{
	String name = "B";

    public String getName(){
    	return name;
    }

	public void demarre() {
		System.out.println(getName() + " demarre");
	}
}

public class C extends B{
	String name = "C";

    public String getName(){
    	return name;
    }

	public void demarreWithSuper() {
		System.out.println(super.getName() + " demarre");
	}

	public void demarreNoSuper() {
		System.out.println(getName() + " demarre");
	}
}

public class D extends B{
    public String getName(){
    	return name;
    }

	public void demarreNoSuper() {
		System.out.println(getName() + " demarre");
	}
}

public class Test {
	public static void main(String[] args) {
		B b = new B();
		b.demarre();

		Car bCar = new B();
		bCar.demarre();

		C c = new C();
		c.demarre(); // c 里并没有定义这个函数
		c.demarreWithSuper();
		c.demarreNoSuper();

		D d = new D();
		d.demarre();

		transfer(c);    // TransferC
		transfer((B)c); // TransferB
		transfer(d);    // TransferB
	}

    	public static void transfer(B b){
    		System.out.println("TransferB");
    		b.demarre();
    	}

    	public static void transfer(C c){
    		System.out.println("TransferC");
    		c.demarre();
    	}
	}
}

输出是 B demarre B demarre C demarre B demarre C demarre B demarre TransferC C demarre TransferB C demarre TransferB B demarre