Java 面向对象的多态特征介绍
java
it书童
2020-08-08 15:43:11
0赞
0踩
240阅读
0评论
多态
多态的特性就是,运行期才能动态决定调用的子类方法。对某个类型调用某个方法,执行的实际方法可能是某个子类的覆写方法。这种不确定性的方法调用,作用是:允许添加更多类型的子类实现功能扩展,却不需要修改基于父类的代码
代码当中体现多态性,其实就是一句话:父类引用指向子类对象。
格式:
父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
Father 类
public class Father {
public void method() {
System.out.println("父类方法");
}
public void methodFather() {
System.out.println("父类特有的方法");
}
}
Son 类
public class Son extends Father {
@Override
public void method() {
System.out.println("子类方法");
}
}
调用
public class Test {
public static void main(String[] args) {
// 使用多态的写法:左侧是父类的引用,右侧是子类的对象
Father obj = new Son();
obj.method(); // 子类方法
obj.methodFather(); // 父类特有的方法
}
}
多态访问成员变量
多态访问成员变量的两种方式:
-
直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。
-
间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。
Father 类
public class Father {
int num = 10;
public void method() {
System.out.println("父类方法");
}
public void methodFather() {
System.out.println("父类特有的方法");
}
public void showNum() {
System.out.println(num);
}
}
Son 类
public class Son extends Father {
int num = 20;
int age = 16;
@Override
public void method() {
System.out.println("子类方法");
}
@Override
public void showNum() {
System.out.println(num);
}
public void methodSon() {
System.out.println("子类特有方法");
}
}
调用
public class Test {
public static void main(String[] args) {
// 使用多态的写法:左侧是父类的引用,右侧是子类的对象
Father obj = new Son();
// 取父值
System.out.println(obj.num); // 10
// 无法获取子类特有的成员变量
// System.out.println(obj.age); // 报错
// 子类如果没有覆盖重写,就取父值;否则取子值
obj.showNum(); // 20
}
}
实例
Animal 类
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Cat 类
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
}
Dog 类
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
}
调用
public class Test {
public static void main(String[] args) {
Animal[] animals = {
new Animal("动物"),
new Cat("猫"),
new Dog("狗")
};
getAnimalName(animals);
}
/**
* 该方法只需要与 Animal 类打交道,不需要知道 Dog 和 Cat 的存在
* 即使我们新增 Animal 的子类,也不需要修改此方法
* @param animals
*/
public static void getAnimalName(Animal... animals) {
for (Animal animal : animals) {
System.out.println(animal.name);
}
}
}
结果:
动物
猫
狗
- 上一篇: Java 类的继承与接口实现的区别
- 下一篇: Java 对象的上下转型介绍

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/559/introduction-of-java-object-oriented-polymorphic-features
精品付费
个人开发者通过payjs接入微信支付
2815
0
这一次,真正掌握composer
1597
0
相关推荐
java 数据类型转换
228
0
Java Lambda 如何使用详解
205
0
Java 动态代理实现方法增强详解
206
0
spring 关于生命周期的注解
182
0
Java 基于接口实现动态代理
183
0
SpringMvc 使用传统方式上传文件
202
0
Lambda表达式的几种简化写法
222
0
java反射入门
226
0
java的file类详解
201
0
springboot 多环境部署
112
0
简单工厂
184
0
单例模式-懒汉式实现
148
0