学校网站群建设方案,自己做网站导航页,怎样做酒店网站ppt,网站图片展示代码目录
1.多态是什么#xff1f;
2.多态的条件
3.重写
3.1重写的概念
3.2重写的作用
3.3重写的规则
4.向上转型与向下转型
4.1向上转型
4.2向下转型
5.多态的优缺点
5.1 优点
5.2 缺点 面向对象程序三大特性#xff1a;封装、继承、多态。 1.多态是什么#xff1…目录
1.多态是什么
2.多态的条件
3.重写
3.1重写的概念
3.2重写的作用
3.3重写的规则
4.向上转型与向下转型
4.1向上转型
4.2向下转型
5.多态的优缺点
5.1 优点
5.2 缺点 面向对象程序三大特性封装、继承、多态。 1.多态是什么 概念 简单的说就是一个对象有多种形态具体点说多态就是父类中的属性和方法被子类继承后可以具有不同的数据类型或不同的行为使父类中的同一个属性和方法在父类与各个子类具有不同的含义。 举例 如下图子类都继承了父类但同一个eat方法在不同父类子类中表现不同行为就是多态。 2.多态的条件 三大条件 继承必须存在继承重写子类必须对父类中的方法进行重写向上转型通过父类的引用调用子类的重写的方法class Animal{public String name;public int age;public void eat(){System.out.println(this.name 吃饭);}public Animal(String name, int age) {this.name name;this.age age;}
}
class Dog extends Animal{ //继承
Override //重写 public void eat() { //向上转型System.out.println(this.name 吃狗粮);}public void sleep(){System.out.println(this.name 在睡觉);}public Dog(String name, int age) {super(name, age);}
}
class Cat extends Animal{ //继承Override //重写 public void eat() { //向上转型System.out.println(this.name 吃猫粮);}public void sleep(){System.out.println(this.name 在睡觉);}public Cat(String name, int age) {super(name, age);}
}
public class Test1 {public static void eat(Animal animal){animal.eat();}public static void main(String[] args) {Cat cat new Cat(花花,1);Dog dog new Dog(多多,2);eat(cat);eat(dog);}
}
上述代码满足了多态的三个条件并实现了多态。 3.重写
3.1重写的概念 重写override又称覆盖在子类中创建一个与父类具有相同的返回值类型、方法名、参数列表的方法以实现与父类不同的行为。 3.2重写的作用 子类可以根据需要定义特定于自己的行为。既沿袭了父类的功能名称又根据子类的需要重新实现父类方法从而进行扩展增强满足子类的需求。 3.3重写的规则 参数列表必须完全与被重写的方法参数列表相同返回的类型必须与被重写的方法的返回类型相同访问权限不能比父类中被重写方法的访问权限更低publicprotecteddefaultprivate重写方法一定不能抛出新的检査异常或者比被重写方法声明更加宽泛的检査型异常不能重写静态、private修饰、final修饰、构造方法等父类的成员方法只能被它的子类重写。2中代码就构成了重写。 注意 避免在构造方法中调用重写的方法不然可能会造成一些隐藏的问题。 4.向上转型与向下转型
4.1向上转型 向上转型实际上就是创建一个子类对象将其当作父类对象来使用。 格式 父类类型 对象名 new 子类类型 例如
Animal cat new Cat多多1
//向上转型将Cat类型转换为Animal类型
//小范围向大范围的转换 这段代码就是直接赋值实现向上转型2中代码就是通过方法传参来实现向上转型然后也可以通过方法返回来实现向上转型。 优点让代码实现更灵活简单 缺点不能调用子类特有的方法 4.2向下转型 当子类对象向上转型后将无法调用子类中的方法如果我们想调用子类特有的方法我们就可以使用向下转型将父类引用还原成子类对象即可。 向下转型有的时候不太安全例如一个狗类对象向上转型转换为动物类在向下转型的时候不一定转换为狗类可能转换为猫类等所以当我们向下转型的时候要加上强制转换符。 有的时候也会造成抛出异常所以Java中引入了instanceof如果结果为true则可以安全转换。
public class Test{public static void main(String[] args) {Cat cat new Cat(花花,2);Dog dog new Dog(多多, 1);// 向上转型Animal animal cat;animal.eat();animal dog;animal.eat();if(animal instanceof Cat){cat (Cat)animal;cat.mew();}if(animal instanceof Dog){dog (Dog)animal;dog.bark();}}
}
5.多态的优缺点
5.1 优点
举例
//假如打印一个形状
class Shape {//属性....public void draw() {System.out.println(画图形);}
}
class Rect extends Shape{Overridepublic void draw() {System.out.println(♦);}
}
class Cycle extends Shape{Overridepublic void draw() {System.out.println(●);}
}
class Flower extends Shape{Overridepublic void draw() {System.out.println(❀);}
}
//不使用多态
public static void drawShapes() {Rect rect new Rect();Cycle cycle new Cycle();Flower flower new Flower();String[] shapes {cycle, rect, cycle, rect, flower};for (String shape : shapes) {if (shape.equals(cycle)) {cycle.draw();} else if (shape.equals(rect)) {rect.draw();} else if (shape.equals(flower)) {flower.draw();}}
}
//使用多态
public static void drawShapes() {// 我们创建了一个 Shape 对象的数组.Shape[] shapes {new Cycle(), new Rect(), new Cycle(),new Rect(), new Flower()};for (Shape shape : shapes) {shape.draw();}
}
//我们可以明显看出使用多态的好处 能够降低代码的 圈复杂度, 避免使用大量的 if - else可扩展能力更强如果要新增一种新的形状, 使用多态的方式代码改动成本也比较低5.2 缺点 属性没有多态性当父类和子类都有同名属性的时候通过父类引用只能引用父类自己的成员属性构造方法没有多态性