class SuperEx {
String s = "父类成员变量";
public void method(){
System.out.println("SupMethod");
}
}
class SubEx extends SuperEx {
String s = "子类成员变量";
public void method(){
System.out.println("SubMethod");
}
}
class Demo {
public static void main (String[] args) {
SubEx sub = new SubEx();//生成子类的对象
SuperEx sup = new SubEx();//父类的对象指向了子类的内存空间
System.out.println(sub.s);//子类成员变量
function( sub );// SubMethod
System.out.println(sup.s);// 父类成员变量
function( sup );// 调用方法,编译看左边,运行看右边SubMethod
}
public static void function (SuperEx sup) {
sup.method();
}
}
运行结果为:
子类成员变量
SubMethod
父类成员变量
SubMethod
以抽象类作为形参:
其形参类型和返回值类型均为该抽象类的子类对象
abstract class SuperEx {
String s = "父类成员变量";
public abstract void method();
}
class SubEx extends SuperEx {
String s = "子类成员变量";
public void method(){
System.out.println("SubMethod");
}
}
class Demo {
public static void main (String[] args) {
SubEx sub = new SubEx();//子类对象
SuperEx sup = new SubEx();//父类对象指向子类对象的内存空间
System.out.println(sub.s);// 子类成员变量
function( sub );// SubMethod
System.out.println(sup.s);// 父类成员变量
function( sup );// SubMethod,父类对象指向了子类,在调用方法时,编译看左边,运行看右边
}
public static void function (SuperEx sup) {
sup.method();
}
}
运行结果为:
子类成员变量
SubMethod
父类成员变量
SubMethod
以接口为形参:
其形参和返回值类型均为接口的实现类的对象
interface Inter {
public static final String s = "接口常量";
public abstract void method();
}
class SubEx implements Inter {
String s = "子类成员变量";
public void method(){
System.out.println("SubMethod");
}
}
class Demo {
public static void main (String[] args) {
SubEx sub = new SubEx();//子类对象
Inter in= new SubEx();//接口对象指向实现类的内存空间
System.out.println(sub.s);//子类成员变量
function( sub );// SubMethod
System.out.println(in.s);// 接口常量
function( in );
}
public static void function (Inter in) {
in.method();//SubMethod
}
}
运行结果为:
子类成员变量
SubMethod
接口常量
SubMethod