例4.11
JConstructionPeople.java
public class JConstructionPeople
{
private String name;
private int age;
public JConstructionPeople(String n, int age)
{
name = n;
this.age = age;
}
public JConstructionPeople(String n)
{
this(n, 10);
}
public JConstructionPeople()
{
this("who am i");
}
public static void main(String args[])
{
JConstructionPeople a1 = new JConstructionPeople();
JConstructionPeople a2 = new JConstructionPeople("张三");
System.out.println("对象a1的name是 " + a1.name + " ;对象a1的age是" + a1.age
+ "岁");
System.out.println("对象a2的name是 " + a2.name + " ;对象a2的age是" + a2.age
+ "岁");
}
}
例4.12
JOverridingTest.java
class JOverriding
{
public void test1()
{
System.out.println("Hi JOverriding");
}
}
class JSubOverriding extends JOverriding
{
//方法覆盖
public void test1()
{
System.out.println("Hi JSubOverriding");
}
//方法重载
public void test1(int i)
{
System.out.println("Hi JSubOverriding,Now i = " + i);
}
/**
* 既不是方法重载也不是覆盖,不被允许
* public String test1() { return "ok"; }
*/
}
public class JOverridingTest
{
public static void main(String args[])
{
JSubOverriding jSubOverriding=new JSubOverriding();
JOverriding jOverriding=new JOverriding();
jSubOverriding.test1();
jSubOverriding.test1(100);
jOverriding.test1();
}
}
例4.13
JStaticMethodTest.java
class JStaticMethod
{
public void One(int i){}
public void Two(int i){}
public static void Three(int i){}
public static void Four(int i){}
}
class JSubStaticMethod extends JStaticMethod
{
public void One(int i){}
//public static void Two(int i){} //编译出错,无法将父类的非静态方法覆盖为静态方法
public static void Three(int i){}
//public void Four(int i){} ////编译出错,无法将父类的静态方法覆盖为非静态方法
}
例4.14
JDynamicMethodTest.java
class A
{
public void Hello()
{
System.out.println("Hello,here is A");
}
}
class B extends A
{
public void Hello()
{
System.out.println("Hello,here is B");
}
}
class C extends B
{
public void Hello()
{
System.out.println("Hello,here is C");
}
}
public class JDynamicMethodTest
{
public static void main(String args[])
{
A a = new A(); // 实例化类A,得到A类型的对象a
B b = new B(); // 实例化类B,得到B类型的对象b
C c = new C(); // 实例化类C,得到C类型的对象c
A x; // 声明一个A类型的对象x,即x的引用对象类型为A
x = a; // 初始化x,被引用的对象类型也是A
x.Hello(); // x实际执行的是类A的Hello()方法
x = b; // 初始化x,通过向上转型,此时被引用的对象类型是B
x.Hello(); // x实际执行的是类B的Hello()方法
x = c; // 初始化x,通过向上转型,此时被引用的对象类型是C
x.Hello(); // x实际执行的是类C的Hello()方法
b = new C(); // 重新初始化b,通过向上转型,此时被引用的对象类型是其子类C
b.Hello(); // b实际执行的是类C的Hello()方法
}
}