展开全部
多态的定义:32313133353236313431303231363533e58685e5aeb931333337616539指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。
JAVA引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就会出现所谓的多态(Polymorphism)。这和C++里的类似。class BaseClass //父类
{
public int book =6;
public void base() {
System.out.println("父类的普通方法");
}
public void test() {
System.out.println("父类的被覆盖的方法");
}
}
public class SubClass extends BaseClass {
//重新定义一个book实例属性覆盖父类的book实例属性
public String book = "Hello!";
public void test() {
//也叫方法的重写或方法的覆盖
System.out.println("子类覆盖父类的方法")
}
public void sub() {
System.out.println("子类的普通方法");
}
//下面给出主方法的入口
public static void main(String[ ] args) {
//下面编译时类型和运行时类型完全一样,因此不存在多态
BaseClass bc = new BaseClass();
//创建父类对象
//输出6
System.out.println(bc.book);
//下面两次调用将执行BaseClass(父类)的方法
bc.base(); bc.test();
//下面编译时类型和运行时类型完全一样,因此不存在多态
SubClass sc = new SubClass();
//创建子类对象
//输出"Hello!"
System.out.println(sc.book);
//下面调用将执行从父类继承到的base方法
sc.base();
//下面调用将执行从当前类的test方法
sc.test();
//下面编译时类型和运行时类型不一样,多态发生
BaseClass ploymophicBc = new SubClass();
//输出6----表明访问的是父类属性
System.out.println(ploymophicBc.book);
//下面调用将执行从父类继承到的base方法
ploymophicBc.base();
//下面调用将执行从当前类的test方法
ploymophicBc.test();
//因为ploymophicBc的编译类型是BaseClass,BaseClass 类没有提供资金SUBYYIF
//所以下面代码编译时会出现错误
//ploymophicBc.sub();
}
}