Java基础总结之多态

来源:互联网 发布:自制编程语言 编辑:程序博客网 时间:2024/05/19 15:26

可以理解为事物存在的多种体现形态,多态的出现大大的提高程序的扩展性,当然有利必有弊,虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。
多态体现在程序里就是父类的引用指向了自己的子类对象,即父类的引用也可以接收自己的子类对象。
格式:父类名 对象名=new 子类名()。
这里有个前提是必须是类与类之间有关系。要么继承,要么实现。通常还有一个前提是存在成员方法覆盖(并非必须)。
既然出现了父子类,多态势必和继承是有关联的,在使用时关键点自然也是两个类中的变量方法是如何调用的。总结有以下规则:
1.用对象调用的变量和函数,必须是父类自己具有的,否则编译不能通过。
2.静态成员和非静态的成员变量,(或者说成员变量和静态函数)对象调用的都是父类的。
3.非静态的成员函数,对象调用的是子类的。如果父类有而子类没有,那么就等同于调用父类自己的。
看了上面的规则后会明白上面为什么说存在成员方法覆盖并非必须的,但是如果没有非静态成员方法覆盖的话,用多态也就没什么意义了:对象可以调用的全是父类的东西。
下面看一个代码示例:
public class Test1 {
public static void main(String[] args) {
Fu fu=new Zi(); //多态,父类引用指向子类对象
sop(fu.sameH); //对象调用非静态同名成员变量
sop(fu.st); //对象调用静态同名成员变量
fu.fuRun(); //对象调用非静态同名函数
fu.fuRun2(); //对象调用非静态父类特有函数
fu.staticRun(); //对象调用静态同名函数
}
public static void sop(Object obj){
System.out.println(obj);
}
}
class Fu{
int sameH=1;
static int st=10;
void fuRun(){
System.out.println(“Fu run”);
}
void fuRun2(){
System.out.println(“Fu2 run”);
}
static void staticRun(){
System.out.println(“Fu staitc run”);
}
}

class Zi extends Fu{
int sameH=3,noSame=0; //对象不可调用父类没有的noSame
static int st=11;
void fuRun(){
System.out.println(“Zi run”);
}
void ziRun(){ //对象不可调用父类没有的ziRun
System.out.println(“Zi2 run”);
}
static void staticRun(){
System.out.println(“Zi staitc run”);
}
}
运行结果为
1
10
Zi run
Fu2 run
Fu staitc run

0 0
原创粉丝点击