Java 面向对象 之 人吃水果

简介:

http://www.verejava.com/?id=16992850564257

/**
    题目: 人可以(孩子,学生,老师) 吃 水果(苹果,葡萄,芒果,菠萝)

    思路:
        1. 抽象出类 : 人(Person){孩子(Baby),学生(Student)}, 水果(Fruit){苹果(Apple),葡萄(Grape),芒果(Mango)}
        2. 找出类的关系: 
            水果 -> 人
            (孩子,学生) 是 人的分类  也是人只是声明可以吃水果, 但是吃水果的具体执行者
             是 (孩子,学生)
            (苹果,葡萄,芒果) 是 水果的分类

        3. 找出属性: 孩子,学生(姓名,水果引用)  
        4. 找出方法: 孩子,学生都吃(eat)水果

    
    子类->父类的转换 
    子类->父类后 父类引用调用子类复写的方法 
    作用 :解耦 也就是降低类与类之间的耦合度 提供可扩展性
*/
public class Polymorphism5 {
    
    //打印人吃水果的信息
    public void output(Person p) {
        //实例化一个苹果 和 一个葡萄
        Apple apple = new Apple("红富士");
        Grape grape = new Grape("黑葡萄");
        Mango mango = new Mango("大芒果");
        PineApple pineApple = new PineApple("菠萝");

        p.eat(apple);
        System.out.println(p.getName() + " 吃了 " + p.getFruit().getName());
        p.eat(grape);
        System.out.println(p.getName() + " 吃了 " + p.getFruit().getName());
        p.eat(mango);
        System.out.println(p.getName() + " 吃了 " + p.getFruit().getName());
        p.eat(pineApple);
        System.out.println(p.getName() + " 吃了 " + p.getFruit().getName());
    }

    public static void main(String[] args) {
        Polymorphism5 test = new Polymorphism5();

        //李明吃水果
        test.output(new Baby("李明"));

        //张涛吃水果
        test.output(new Student("张涛"));

        //郭老师吃水果
        test.output(new Teacher("郭老师"));

    }
}

abstract class Person {
    
    protected Fruit fruit;
    protected String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public Fruit getFruit() {
        return this.fruit;
    }

    //声明人是可以吃水果的
    public abstract void eat(Fruit fruit);
}

class Teacher extends Person {

    public Teacher(String name) {
        super(name);
    }

    //吃水果
    public void eat(Fruit fruit) {
        this.fruit = fruit;
    }

}

class Baby extends Person {

    public Baby(String name) {
        super(name);
    }

    //吃水果
    public void eat(Fruit fruit) {
        this.fruit = fruit;
    }

}

class Student extends Person {

    public Student(String name) {
        super(name);
    }

    //吃水果
    public void eat(Fruit fruit) {
        this.fruit = fruit;
    }

}

class Fruit {
    
    private String name;

    public Fruit(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

class PineApple extends Fruit {
    
    public PineApple(String name) {
        super(name);
    }
}

class Apple extends Fruit {
    
    public Apple(String name) {
        super(name);
    }
}

class Grape extends Fruit {
    
    public Grape(String name) {
        super(name);
    }
}

class Mango extends Fruit {
    
    public Mango(String name) {
        super(name);
    }
}

http://www.verejava.com/?id=16992850564257

目录
相关文章
|
30天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
25 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
2月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
45 2
|
4月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
4月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
39 4
|
4月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
3月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
30 0
|
4月前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
81 2
|
4月前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。
31 0
|
4月前
|
Java 开发者
Java编程之旅:探索面向对象的力量
【9月更文挑战第16天】在编程的世界中,Java以其强大的面向对象编程特性而闻名。本文将带你走进Java的世界,一起探索类与对象的奥秘,学习如何通过封装、继承和多态性构建健壮的软件系统。无论你是初学者还是有经验的开发者,本文都旨在提供实用的代码示例,帮助你提升Java技能。准备好开始这段旅程了吗?让我们启程吧!