【学懂Java】(四)面向对象编程-5

时间:2023-01-22 10:57:05

一.Object类

Object类是所有类的父类,一个类如果没有使用extends显性的继承另外一个类,那么这个类就继承自Object类

public class Person{
}
//等同于
public class Person extends Object{
}

Object类的主要方法

  • (1)toString()方法
  • (2)equals()方法

二.多态

1.概念

对应同一个指令(调用同一个名称的方法),不同的对象给予不同的反应(不同的方法实现)

例如:用手机照相,不同手机产生不同结果

【学懂Java】(四)面向对象编程-5

而多态就是用同一个引用类型,使用不同的实例而执行不同操作

2.规范(多态实现的提前):

  1. 必须要有继承关系
  2. 子类方法必须重写父类的方法
  3. 父类引用指向子类对象

例如

public class Dog extends Pet {
@Override
public void feed() {
System.out.println("狗");
}
}
public class Cat extends Pet {
@Override
public void feed() {
System.out.println("猫");
}
}
public abstract class Pet {
public abstract void feed();
}
public class Person{
// public void feed(Cat cat){
// cat.feed();
// }
//
// public void feed(Dog dog){
// dog.feed();
// }
//将上面两个重复的写为:
public void feed(Pet pet){
pet.feed();
}
public static void main(String[] args) {
Person p = new Person();
Pet dog = new Dog();
//父类引用 //子类对象
Pet cat = new Cat();
p.feed(dog);
p.feed(cat);
}

并且使用多态后,需要增加宠物时,只需要添加一个宠物类,再在person类里​​Pet animal = new Animal();​​就可以了。

注意

引用类型的转换跟基本数据类型的转换类似:
  • 当父类需要转成子类的时候,要进行强制转换,但是在强制转换之前一定要先判断父类引用指向的子类对象到底是谁,如果无法确定,在运行过程中可以出错
  • 当子类需要向父类转换的时候,直接自动转换,不需要进行任何的判断

【学懂Java】(四)面向对象编程-5

3.实现多态的两种形式

  • 使用父类作为方法形参实现多态
  • 使用父类作为方法返回值实现多态

以上代码已经实现了用父类作为方法形参实现多态,接下来我们看看使用父类作为方法返回值实现多态

public class Person{
public Pet buyPet(int type){
if(type==1){
return new Dog();
}else if(type == 2){
return new Cat();
}else{
return new Penguin();
}
}

public static void main(String[] args) {
Person p = new Person();
Pet pet = p.buyPet(2);
if(pet instanceof Dog){
System.out.println("买的是一只狗");
}else if(pet instanceof Cat){
System.out.println("买的是一只猫");
}else{
System.out.println("买的是一只企鹅");
}
}
}
public class Dog extends Pet {
@Override
public void feed() {
System.out.println("狗");
}
}
public class Cat extends Pet {
@Override
public void feed() {
System.out.println("猫");
}
}
public abstract class Pet {
public abstract void feed();
}

4.多态的目的

  • 为了提高代码的扩展性和维护性
  • 方便代码逻辑的编写