java基础知识:多态
一. 多态
1.在Java中,多态体现在两个方面:由方法重载实现的静态多态性(静态多态)和方法重写实现的动态多态性(运行时多态)
2.多态的体现:父类的引用指向了子类对象,父类的引用也可以接收自己的子类对象。
3.多态的前提:类与类之间要么继承,要么实现,同时存在一个前提:重写。
4.多态的弊端:只能使用父类的引用访问父类成员。
5.多态的特点:
Anima a=new cat();
在多态中,非静态成员函数,成员函数在多态调用时,编译看左边,运行看右边。
在多态中,静态成员函数,无论编译和运行,都看左边。
在多态中,成员变量的特点,无论编译和运行,都参考左边。
案例说明:
A类:
public class A {
static int k=8;
int m=8;
public void liu(){
System.out.println("我是A");
}
public static void fang(){
System.out.println("我是A fang");
}
}
B类:
public class B extends A
{
static int k=3;
int m=5;
public void liu(){
System.out.println("我是B liu");
}
public void jian(){
System.out.println("我是 b jian");
}
public static void fang(){
System.out.println("我是 b fang");
}
}
Test类:
public class Test {
public static void main(String args[]){
A a=new B();
System.out.println("m:"+a.m+"===k:"+a.k);
B b=new B();
System.out.println("m:"+b.m+"===k:"+b.k);
}
}
结果为:
m:8===k:8
m:5===k:3
结论为:在多态中,成员变量(静态或者非静态)的特点,无论编译和运行,都参考左边。
Test类:
public class Test {
public static void main(String args[]){
A a=new B();
System.out.println("liu():");
a.liu();//liu为非静态成员函数,显示右边,即子类的函数
System.out.println("=======");
a.fang();//fang为静态成员函数,显示左边,即父类中的函数
System.out.println("=======");
//a.jian();//报错,jian方法没有在A中定义。
B b=new B();
b.jian();
System.out.println("bijiao:"+a+"===="+b);
}
}
结果为:
liu():
我是B liu
=======
我是A fang
=======
我是 b jian
bijiao:com.stylefeng.guns.modular.handler.B@2a3046da====com.stylefeng.guns.modular.handler.B@2a098129
Process finished with exit code 0
结论为:liu()方法为非静态成员函数,fang()为静态成员函数,
在多态中,非静态成员函数,成员函数在多态调用时,编译看左边,运行看右边。看a.liu()
在多态中,静态成员函数,无论编译和运行,都看左边。看a.fang()
A a=new B();a的hash值和 B b=new B();的b的hash值时不同的,不是同一个对象。
二 子类和父类的变量获取
父类: public class Fu { int m=4; }
子类:
public class Zi extends Fu {int m=5; public void show(){ System.out.println("父类:"+super.m+"子类:"+this.m); } }
调用:
public class Test { public static void main(String args[]){ Zi z=new Zi(); z.show(); } }
结果:
父类:4子类:5
Process finished with exit code 0
结论:
子、父类中的变量:1.如果子类出现与父类相同名字的非私有变量,子类要访问本类的变量用this,子类要访问父类中的变量用super。
相关文章
- Java 基础知识的一些易错点
- java数据库连接池简单实现
- Java核心技术 卷Ⅰ 基础知识(原书第10版)
- Java核心技术 卷Ⅰ基础知识 1.1 Java程序设计平台
- Java核心技术卷I基础知识1.2.7 可移植性
- Java核心技术卷I基础知识3.3.2 浮点类型
- Java核心技术卷I基础知识3.10.3 数组拷贝
- Java核心技术卷I基础知识导读
- Java工具类参考
- 第76节:Java中的基础知识
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
- java基础知识
- Java中数组、List、Set互相转换
- Java基础知识【上】(转载)
- Java做acm所需要的基础知识之排序问题
- java基础知识讲解(一)数据类型和运算符
- java程序设计第二课
- JAVA泛型
- Java项目开发工具汇总
- aspose java 读取word文档中的图片保存至文件服务器并通过 图片路径替换该图片