面向对象编程的三大特征:封装;继承;多态

简介: 面向对象编程的三大特征:封装;继承;多态

面向对象编程的三大特征:封装;继承;多态

前言: 最近在B站搜到韩顺平老师的java入门课,这里记录下实践;

熟悉&&掌握面向对象三大特征:封装;继承;多态;

多态是基于封装,继承的,所以下面是多态的一个例子:
主人类:拥有给他的宠物(猫,狗,猪 等等)喂食(Feed )的方法,没有用多态的时候,需要针对不同的动物与不同的食物写对应的方法;例如给狗喂食,feed(Dog dog,Done done),
给猫喂食 feed(Cat cat,Fish fish);

解决思路

观察每一个喂食方法,可以发现猫,狗,猪 可以归属于动物类(Animal类);骨头,鱼 可以归属于食物类(Food 类);也就是说抽象多一层后,就不再用针对每种动物写不同的方法,从而减少重复性的代码,更加容易维护,大大增加开发效率。

主人类:

package com.lrtjava.poly_;

public class Master {
   
    String name ;

    public Master(String name){
   
        this.name = name;
    }
    public String getName() {
   
        return name;
    }
    public void setName(String name) {
   
        this.name = name;
    }
    // 使用多态后,抽象一层动物类,食物类 
    public void feed (Animal animal, Food food){
   
        System.out.println("主人"+ name + "给" + animal.getName() + "吃" + food.getName());
    }
    // 使用多态前,针对不同的动物,写不同喂食方法
    public void feed (Dog dog, Bone bone){
   
        System.out.println("主人"+ name + "给" + dog.getName() + "吃" + bone.getName());
    }
    public void feed (Cat cat, Fish fish){
   
        System.out.println("主人"+ name + "给" + cat.getName() + "吃" + fish.getName());
    }
}

程序入口:

package com.lrtjava.poly_;

public class Poly01 {
   
    public static void main(String[] args) {
   
        System.out.println("使用多态前:需要new 每个动物;eg: 猫,狗,new 每种食物eg:鱼,骨头");
        Master m = new Master("Bruce");
        Dog dog = new Dog("大汪汪");
        Bone bone = new Bone("美味的大骨头");
        m.feed(dog,bone);

        Cat cat = new Cat("小喵喵");
        Fish fish = new Fish("小黄鱼");
        m.feed(cat,fish);

        System.out.println("多态后:每个动物继承于动物类Animal,每种食物继承于食物类Food");
        Animal dog2 = new Animal("汪星人2");
        Food bone2 = new Food("骨头2");
        Animal cat2 = new Animal("喵2");
        Food fish2 = new Food("鱼2");
        m.feed(dog2,bone2);
        m.feed(cat2,fish2);


        Animal dog3 = new Dog("汪星人3"); // 向上转型:子类转为父类;
        dog3.cry();

        Animal animal = new Cat("Cat4"); // 要求父类的引用必须指向的是当前目标类型的对象 也就是下面cat4 是 Cat 类型
        Cat cat4 = (Cat) animal; // 需求:父类想调用子类的方法 ; 解决:向下转型-父类转为子类;
        cat4.eat("fish");

    }
}

Animal 类

package com.lrtjava.poly_;
public class Animal {
   
    String name;
    public  Animal(String name){
   
        this.name = name;
    }
    public String getName() {
   
        return name;
    }
    public void setName(String name) {
   
        this.name = name;
    }
    public void cry(){
   
       System.out.println("Animal cry()");
    }
}

Dog 类

package com.lrtjava.poly_;
public class Dog extends Animal {
   
    String name;
    public Dog (String name){
   
        super(name);
    }
    public static void eat(String food){
   
        System.out.println("Dog eat" + food);
    }
}

Cat 类

package com.lrtjava.poly_;

public class Cat extends Animal {
   
    public Cat(String name) {
   
        super(name);
    }
    public static void eat(String food){
   
        System.out.println("Cat eat " + food);
    }
    @Override
    public void cry() {
   
        super.cry();
        System.out.println("Cat cry()");
    }
}

Food 类参照动物类,猫类;狗类;可以写出,主要是 extends 继承关键字;

好了,谢谢大家,先写到这里了,后续打算写写 匿名内部类的相关用法。

相关文章
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
5月前
|
C++
C++一分钟之-继承与多态概念
【6月更文挑战第21天】**C++的继承与多态概述:** - 继承允许类从基类复用代码,增强代码结构和重用性。 - 多态通过虚函数实现,使不同类对象能以同一类型处理。 - 关键点包括访问权限、构造/析构、菱形问题、虚函数与动态绑定。 - 示例代码展示如何创建派生类和调用虚函数。 - 注意构造函数初始化、空指针检查和避免切片问题。 - 应用这些概念能提升程序设计和维护效率。
39 2
|
5月前
|
Python
面向对象详解,面向对象的三大特征:封装、继承、多态-1
面向对象详解,面向对象的三大特征:封装、继承、多态
|
5月前
|
Python 容器
面向对象详解,面向对象的三大特征:封装、继承、多态-2
面向对象详解,面向对象的三大特征:封装、继承、多态
|
5月前
|
安全
面向对象特征(抽象、封装、继承、多态)的具体用法
面向对象特征(抽象、封装、继承、多态)的具体用法
23 0
|
5月前
面向对象三大特征——封装,继承
面向对象三大特征——封装,继承
|
6月前
|
编译器 C++
[C++] 面向对象的三大特性:封装、继承和多态
[C++] 面向对象的三大特性:封装、继承和多态
80 0
|
设计模式 数据安全/隐私保护
面向对象编程基础:封装、继承、多态与抽象的全面解析
面向对象编程基础:封装、继承、多态与抽象的全面解析
156 0
浅谈 面向对象三大特性:封装 继承 多态
浅谈 面向对象三大特性:封装 继承 多态
90 0
|
Java 数据安全/隐私保护
14 java面向对象的三大特征【继承、封装、多态】
封装的实现: 实现三部曲: ①私有化,属性 ②提供公共的getXxx()方法 ②提供公共的setXxx()方法
117 0