【小白日记】Java中多态的理解随记
题外话:当初硬头皮承接项目之时,就已经做好了边学习边做项目的打算。这样以来可以极大的缩短学习时间。(先试着做,哪不会了再学习)好处是可以在实践当中积累丰富的经验,但缺点是这样的方式对知识的掌握扎实程度远远不如一步一个脚印的学过来…待后期有充足时间之后再整体性的对知识进行一个补足。
btw,简单说一下现在项目的计划和基本进度。目前老师已经给出所需要的需求。(并不是很多),基本基本已经确定了后端用ssm来搭建,前端这边选用了AdminLTE2来进行搭建。
多态
概念
摘自@菜鸟教程
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,
多态的语法格式
- 父类类名 引用名称 = new 子类类名();
- 当是多态时,该引用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法
Example:
Student s = new girl();
多态存在的条件
- 子类必须继承父类
- 子类重写父类的方法
- 父类类名 引用名称 = new 子类类名();
多态.好处()?
- 减少代码的冗余性
建了一个例子方便理解
Example:
- 目的:主人喂养宠物
- 新建Pet类
public class Pet {
public void eat() {
System.out.println("I'm eating....");
}
}
- 新建Dog、Cat类
继承Pet属性并重写eat方法
class Dog extends Pet{
public void eat() {
System.out.println("Eating.. WangWang!");
}
}
class Cat extends Pet{
public void eat() {
System.out.println("Eating.. Miao!");
}
}
- 新建Master类
public class Master {
//传统方法
public void feed(Dog dog) {
dog.eat();
}
public void feed(Cat cat) {
cat.eat();
}
}
- 新建Test主类
public class Test {
public static void main(String[] args) {
//Create Master
Master m = new Master();
//Create Dog
Dog d = new Dog();
//Master feed Pet
m.feed(d);
//Create Cat
Cat c = new Cat();
//Master feed Pet
m.feed(c);
System.out.println("-------------------------------------------------------");
}
}
这时发现 如果按照传统方法编写这个程序,那么每当添加一种动物就要多写(告诉主人)一种动物的喂养方法
以此类推,如果你有上百种宠物 你就需要编写同样的方法 大大增加了代码量
这时候多态就跑来挽救世界了
当我们改写为多态方法时你会发现
- Master类
public class Master {
//多态
public void feed(Pet pet) {
pet.eat();
}
}
对的 对比一哈
- 传统方法 Master类
public class Master {
//传统方法
public void feed(Dog dog) {
dog.eat();
}
public void feed(Cat cat) {
cat.eat();
}
}
- run 一下吧
运行结果
Eating… WangWang!
Eating… Miao!