什么是OOP

OOP,全称是Object Oriented Programming,就是面向对象编程,是一种计算机编程范式。核心思想是将现实世界中的事物抽象成对象,通过定义对象的属性和行为,来描述和模拟真实世界的问题。在面向对象编程中,对象是程序的基本单位,OOP封装了数据和行为。对象的数据通过属性(字段或变量)来表示,而对象的行为通过方法(函数或操作)来表示。

OOP特点包括:

:类是现实世界中某些具有共同属性和行为的事物的抽象。它是创建对象的蓝图或模板,定义了对象的属性和行为。

对象:对象是类的实例,具有类定义的属性和行为。在Java中,使用关键字new来创建一个类的实例,即对象。对象可以与现实世界中的事物相对应。

封装:将数据和方法封装在一个对象中,通过对象的接口来访问和操作数据,隐藏了内部的实现细节。这种封装有助于保护数据的安全性,同时减少了程序间的耦合度。

继承:从现有的类创建新的类,并且可以从父类继承属性和方法。这大大提高了代码的重用性,减少了代码的冗余。

多态:同一个方法在不同的对象上具有不同的行为。多态性增加了程序的灵活性和可扩展性,使得程序能够更好地应对未来的变化。


1.定义一个名为 Book 的类,包含了书籍的基本信息,如书名、价格、作者和类目,提供了相应的构造方法、getter 和 setter 方法,以及一个重写的 toString() 方法来生成书籍的字符串表示。

···

public class Book {

//书名

        private Stringname;

//价格

        private double price;

//作者

        private Stringauthor;

//类目

        private Stringtype;

//无参构造

        public Book() {

}

/**

    * Book类的有参构造方法

    * @param name 书名

    * @param price 价格

    * @param author 作者

    * @param type 类目

    */

    public Book(String name,double price, String author, String type) {

this.name = name;

this.price = price;

this.author = author;

this.type = type;

}

public StringgetName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

public StringgetAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public StringgetType() {

return type;

}

public void setType(String type) {

this.type = type;

}

//    public String toString() {

//        return this.getName()+"-"+this.getPrice()+"-"+this.getAuthor()+"-"+this.getType();

//    }

    @Override

    public StringtoString() {

return "Book{" +

"name='" +name +'\'' +

", price=" +price +

", author='" +author +'\'' +

", type='" +type +'\'' +

'}';

}

}

···

2.定义一个名为 Animal 的父类,它代表了一个生物的基本属性和行为。包含了两个私有属性:name(名字)和 age(年龄), getter 和 setter 方法,用于访问和修改这些属性的值。还提供了两个构造函数:一个带有 name 和 age 参数的构造函数,用于在创建对象时初始化这些属性;另一个是无参构造函数,允许在创建对象时不立即初始化这些属性。

···

//父类 生物

public class Animal {

private Stringname;

private int age;

//无参构造

    public Animal() {

}

@Override

    public StringtoString() {

return "Animal{" +

"name='" +name +'\'' +

", age=" +age +

'}';

}

public Animal(String name,int age) {

this.name = name;

this.age = age;

}

public StringgetName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

···

3.在 Mao 类中,自 Animal 类并添加了一个新的属性 isEyes,用于表示某种特性。提供了几个构造函数来初始化这个类,但是有一个小问题:setEyes 方法是空的,不能通过它来设置 isEyes 属性的值。在 toString() 方法中,使用了super.getName() 和 super.getAge() 来获取 Animal 类的 name 和 age 属性值。

···

public class Maoextends Animal{

private boolean isEyes;

public void setEyes(boolean isEyes) {

}

public Mao() {

}

public Mao(String name,int age,boolean isEyes) {

super(name, age);

this.isEyes = isEyes;

}

public Mao(boolean isEyes) {

this.isEyes = isEyes;

}

public boolean isEyes() {

return isEyes;

}

@Override

    public StringtoString() {

return "Mao{" +

"isEyes=" +isEyes +

'}';

}

}

···


4.在Cat 类中,扩展了 Animal 类,并添加了一个新的属性 tail 来表示猫的尾巴信息。在 toString() 方法中添加了 super.getName() 和 super.getAge() 的调用,要求 Animal 类有相应的 public getter 方法。

···

public class Catextends Animal {

private Stringtail;

public Cat(String name,int age, String tail) {

super(name, age);

this.tail = tail;

}

public Cat() {

}

public Cat(String tail) {

this.tail = tail;

}

public StringgetTail() {

return tail;

}

public void setTail(String tail) {

this.tail = tail;

}

@Override

    public StringtoString() {

return "Cat{" +

"tail='" +tail +'\'' +

'}';

}

}

···

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容