大家好,我是
方圆
我们一起把多态好好看看吧!
1. 多态是嘛?
在面向对象语言中,接口的多种不同的实现方式
即为多态。
这句话,我们该怎么理解呢?写写代码看看
class Animal{
// 可被子类访问的name
protected String name;
public Animal() {
this.name = "Animal";
}
// 封装
public String getName() {
return this.name;
}
}
class Cat extends Animal{
Cat(){
name = "Cat";
}
}
class Dog extends Animal{
Dog(){
name = "Dog";
}
}
public class Test {
static public void board(Animal s) {
System.out.println(s.getName());
}
public static void main(String[] args) {
//创建Cat对象
Animal cat = new Cat();
//创建Dog对象
Animal dog = new Dog();
board(cat);
board(dog);
}
}
// output
// Cat
// Dog
上面这个简单的代码,便体现出了多态的作用!根据传入的同一个父类的不同实现类,输出不同的结果
2. 多态的必要条件
继承
重写
基类引用指向派生类
//基类引用指向派生类
Animal cat = new Cat();
2.1 多态成员访问的特点
- 成员变量
编译看左(基类),运行也看左(基类),不论何时都是访问基类的成员变量 - static方法
编译看左(基类),运行也看左(基类) - 成员方法
编译看左(基类),运行看右(派生类)
- 局限:
不能调用派生类特有的成员属性和成员方法
3. 区别重载和重写
多态中,重写
的基本原则
权限修饰符
不能低于父类的方法返回值、方法名、参数
(类型,数目)必须相同- 重写发生在继承或实现中
- 标记为
static
和final
的方法不能被重写(static能被继承,但是不能重写)
重载
的原则
方法名必须相同
,参数必须不同
- 比较常见的就是构造器的重载
重载 | 重写 | |
---|---|---|
权限修饰符 | 可以不同 | 不能低于父类 |
返回值 | 可以不同 | 相同 |
方法名 | 相同 | 相同 |
参数 | 必须不同 | 必须相同 |
简简单单,多看多熟悉~