标签:log end ext ase 没有 print 第一条 style xtend
用简单的话来描述Java:编译类型与运行类型不一致的时候就会出现多态!
下面一段代码可以用来描述Java多态
class BaseClass{
public String flag="父类的flag";
public BaseClass(){
System.out.println("父类无参构造函数被调用");
}
public void base(){
System.out.println("父类的base方法");
}
public void test(){
System.out.println("父类的test方法");
}
}
class SubClass extends BaseClass{
public String flag="子类的flag";
public String flag2="子类的flag2";
public SubClass(){
System.out.println("子类无参构造函数");
}
public void test(){
System.out.println("子类的test方法");
}
public void exam(){
System.out.println("子类的exam方法");
}
}
public class Test{
public static void main(String[] args){
BaseClass bc=new BaseClass();
System.out.println(bc.flag);
bc.test();
// 输出:
// 父类无参构造函数被调用
// 父类的flag
// 父类的test方法
SubClass sc=new SubClass();
System.out.println(sc.flag);
sc.test();
sc.exam();
// 输出:
// 父类无参构造函数被调用
// 子类的flag
// 子类无参构造函数
// 子类的test方法
// 子类的exam方法
BaseClass X=new SubClass();
System.out.println(X.flag);
// System.out.println(X.flag2);//错误
X.base();
X.test();
// X.exam();//报错 没有为类型 BaseClass 定义方法 exam()
// 输出:
// 父类无参构造函数被调用
// 子类无参构造函数
// 父类的flag
// 父类的base方法
// 子类的test方法
}
}
上面代码中,对象实例 X 的编译类型为BaseClass,运行类型为SubClass
在运行的时候
一、实例对象可以调用的方法要满足
1、该方法必须是父类中(即编译类型)包含的方法,子类(即运行类型)特有的方法(新添加的方法)不可以被调用。
2、当调用方法时,表现出来的是子类方法的特征(如子类将父类中的方法改写了,则输出改变以后的内容),否则依旧输出父类原内容
二、实例对象调用变量的原则
1、与上面第一条相同
2、访问该变量的时候,访问的始终是父类的变量,而非子类的变量,与调用方法的第二点相反
标签:log end ext ase 没有 print 第一条 style xtend
原文地址:http://www.cnblogs.com/-beyond/p/6104401.html