首页 > 编程语言 >【学懂Java】(四)面向对象编程-5

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

时间:2023-01-22 10:31:21浏览次数:51  
标签:feed Java Pet void 多态 学懂 面向对象编程 父类 public

一.Object类

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

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

Object类的主要方法

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

二.多态

1.概念

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

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

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

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

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_多态_02

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.多态的目的

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






























标签:feed,Java,Pet,void,多态,学懂,面向对象编程,父类,public
From: https://blog.51cto.com/u_15796276/6021445

相关文章

  • java for循环改造多线程-线程池原理
    通过ThreadPoolExecutor类自定义:publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,l......
  • 【学懂Java】(四)面向对象编程-3
    一.代码块1.概念使用”{}”括起来的一段代码2.分类根据位置可分类普通代码块:定义在方法中的使用{}括起来的代码publicclassCodeBlockDemo{publicvoidtest(){......
  • JAVAWeb学习
    1、基本概念web开发:web,网页的意思静态webhtml,css提供给所有人看的数据始终不会发生变化动态web淘宝,几乎所有的网站提供给所有人看的数据始终会发生变化,每个......
  • 【学懂Java】(四)面向对象编程-4
    一.继承(面向对象编程四大特征)继承优化前:代码重复,不利于修改继承优化后:代码简明,利于修改1.概念类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。提高......
  • java常识
    ......
  • JavaScript 异步编程
    JavaScript是一种单线程语言,这意味着只有一个线程可以在同一时间执行JavaScript代码。在JavaScript中,异步编程是一种编写不阻塞代码的方式,它可以在不影响页面响应的情......
  • JavaScript 中 this 关键字的作用和如何改变其上下文
    一、this关键字的作用JavaScript中的this关键字引用了所在函数正在被调用时的对象。在不同的上下文中,this的指向会发生变化。在全局上下文中,this指向全局对象(在浏......
  • javascript: node.js
     consthttp=require("http");http.createServer(function(request,response){response.writeHead(200,{'Content-type':'text/html'});response.end('<h1>......
  • 前端面试题 - javaScript系列
    Time:2023-01-2021:14:37ES6系列1.说说var、let、const之间的区别var、let、const三者区别可以围绕下面五点展开:变量提升暂时性死区块级作用域重复声明修......
  • java读取Excel成List对象数组
    文件IO是任何软件进行的重要组成部分,我们在电脑上创建一个Excel文件,然后打开它修改一些东西或者删除它。Java给我们提供了操纵文件的很多工具类,本文主要是使用POI操纵Excel......