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
- Java基础总结之多态
- java基础之多态
- java基础之多态
- java基础之多态
- JAVA基础之多态
- JAVA基础之多态
- JAVA基础之多态
- java基础之多态
- java基础之多态
- 黑马程序员-Java基础之多线程总结
- Java基础之多线程知识点总结
- Java基础总结之多线程(2)
- Java基础总结之多线程(1)
- Java基础之多线程知识点总结
- JAVA基础学习之多态
- java基础概念之多态
- Java语言基础之多态
- java语言基础之多态
- leetcode 9 Palindrome Number 回文数
- myeclipse-Linux-安装步骤
- 硬盘安装debian 8.1
- 08-排序5. Sort with Swap(0,*) (25)
- oracle子查询
- Java基础总结之多态
- 项目之中的 shell脚本中变量是怎么变化的。
- Linux的系统级性能剖析工具-perf
- java ----https
- Servlet入门(第一个Servlet的Web程序)
- 关于Java类加载双亲委派机制的思考(附一道面试题)
- 经典的Oracle修改表结构文档
- Linux find 用法示例
- Linux进程间通信(一)---进程间通信概述及其种类