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

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

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

前言: 最近在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 继承关键字;

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

相关文章
|
3月前
|
安全 C#
C# 面向对象编程的三大支柱:封装、继承与多态
【9月更文挑战第17天】在C#中,面向对象编程的三大支柱——封装、继承与多态,对于编写安全、可维护、可复用的代码至关重要。封装通过访问修饰符和属性保护数据;继承允许子类继承父类的属性和方法,实现代码复用和多态;多态则提高了代码的灵活性和通用性。掌握这三大概念能显著提升C#编程能力,优化开发效率和代码质量。
|
6月前
|
C++
C++一分钟之-继承与多态概念
【6月更文挑战第21天】**C++的继承与多态概述:** - 继承允许类从基类复用代码,增强代码结构和重用性。 - 多态通过虚函数实现,使不同类对象能以同一类型处理。 - 关键点包括访问权限、构造/析构、菱形问题、虚函数与动态绑定。 - 示例代码展示如何创建派生类和调用虚函数。 - 注意构造函数初始化、空指针检查和避免切片问题。 - 应用这些概念能提升程序设计和维护效率。
47 2
|
6月前
|
Python
面向对象详解,面向对象的三大特征:封装、继承、多态-1
面向对象详解,面向对象的三大特征:封装、继承、多态
|
6月前
|
Python 容器
面向对象详解,面向对象的三大特征:封装、继承、多态-2
面向对象详解,面向对象的三大特征:封装、继承、多态
|
6月前
|
安全
面向对象特征(抽象、封装、继承、多态)的具体用法
面向对象特征(抽象、封装、继承、多态)的具体用法
27 0
|
6月前
面向对象三大特征——封装,继承
面向对象三大特征——封装,继承
|
7月前
|
编译器 C++
[C++] 面向对象的三大特性:封装、继承和多态
[C++] 面向对象的三大特性:封装、继承和多态
93 0
|
C++
C++ 面向对象特征4 多态(Polymorphism)
C++ 面向对象特征4 多态(Polymorphism)
49 0
|
设计模式 数据安全/隐私保护
面向对象编程基础:封装、继承、多态与抽象的全面解析
面向对象编程基础:封装、继承、多态与抽象的全面解析
248 0
|
Java
面向对象编程基础:类、对象、封装、继承和多态
面向对象编程基础:类、对象、封装、继承和多态
114 0