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

目录
相关文章
|
29天前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
27天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
29 4
|
29天前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
10天前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
11 0
|
1月前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
44 2
|
1月前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。
|
1月前
|
Java 开发者
Java编程之旅:探索面向对象的力量
【9月更文挑战第16天】在编程的世界中,Java以其强大的面向对象编程特性而闻名。本文将带你走进Java的世界,一起探索类与对象的奥秘,学习如何通过封装、继承和多态性构建健壮的软件系统。无论你是初学者还是有经验的开发者,本文都旨在提供实用的代码示例,帮助你提升Java技能。准备好开始这段旅程了吗?让我们启程吧!
|
2月前
|
Java 开发者 C++
|
2月前
|
存储 Java
Java面向对象面试题总结(上)
在Java中,重写(Override)与重载(Overload)是两个重要的概念,关联到方法的定义与调用。重写是指子类对继承自父类的方法进行新的实现,以便提供子类特有的行为,其关键在于方法签名一致但方法体不同。重载则允许在同一个类中定义多个同名方法,只要参数列表不同即可,以此提供方法调用的灵活性。重写关注多态性,而重载强调编译时多态。
25 1
|
2月前
|
存储 Java 数据库连接
Java编程之旅:从基础到高级,探索面向对象的力量
【8月更文挑战第31天】本文是一篇深入浅出的Java编程指南,旨在通过生动的例子和实际代码演示,带领读者从Java的基础语法起步,逐步深入到面向对象的核心概念,最后探讨如何在实际项目中应用这些知识。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和实用的技巧。