一、面向对象编程(oop)的概念
面向对象编程(Object Oriented Programming, OOP是一种编程范式,它将计算机程序视为对象的集合,每个对象都可以接收消息、进行数据处理和与其他对象交互。面向对象编程的核心概念是类和对象,类定义了对象的属性和行为,对象是类的实例。面向对象编程方法尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程。面向对象编程的优点包括重用性、灵活性和扩展性。它能够提供模块化、可重用和易于维护的代码结构。
二、面向对象编程(oop)的特性
1.继承
子类自动继承父类的属性和方法,并可以添加新的属性和方法。
父类 Animal(属性和方法):
package cn.lnfvc.ken;
public class Animal {
private Stringname;
private int age;// 将age声明为int类型
// 无参构造函数
public Animal() {
}
public StringgetName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {// 返回类型改为int
return age;
}
public void setAge(int age) {
this.age = age;
}
public Animal(String name,int age) {// 将age参数类型改为int
this.name = name;
this.age = age;
}
@Override
public StringtoString() {
return "Animal{" +
"name='" +name +'\'' +
", age=" +age +// 去掉了引号
'}';// 修正了拼写错误
}
}
子类 Mao1(属性和方法):
class Mao1 extends Animal {
private boolean isEyes;
public Mao1() {
super();
}
public Mao1(String name,int age,boolean isEyes) {
super(name, age);
this.isEyes = isEyes;
}
public void setEyes(boolean isEyes) {
this.isEyes = isEyes;
}
public boolean isEyes() {
return isEyes;
}
@Override
public StringtoString() {
return "Mao{" +
"name='" + getName() +'\'' +
", age=" + getAge() +
", isEyes=" +isEyes +
'}';
}
}
Mao1 类继承自 Animal 类,这意味着所有 Mao1 对象都是 Animal 对象,但不是所有 Animal 对象都是 Mao1 对象。
2.多态
同一操作作用于不同的对象可以有不同的解释和执行结果。
class CatTest {
public static void main(String[] args) {
Mao1 bigMao =new Mao1();
bigMao.setName("大毛");
bigMao.setAge(20);// 直接设置年龄为int类型
bigMao.setEyes(true);
Mao1 mao =new Mao1();
Animal cat =new Animal();// 创建一个Animal对象
System.out.println(bigMao.toString());// 打印bigMao对象的字符串表示
System.out.println(mao.toString());// 打印mao对象的字符串表示
System.out.println(cat.toString());// 打印cat对象的字符串表示
}
}
bigMao 和 mao 是 Mao1 类型的引用,指向 Mao1 对象,调用 toString 方法时执行的是 Mao1 类中重写的版本。cat 是 Animal 类型的引用,指向 Animal 对象,调用 toString 方法时执行的是 Animal 类中定义的版本。
输出结果:
3.封装
将客观事物封装成抽象的类,并隐藏实现细节,使得代码模块化。
public class Book {
// 书名
private Stringname;
// 价格
private double price;
// 作者
private Stringauthor;
// 类目
private Stringtype;
// 右键生成 构造函数
/**
*
* @param name
* @param price
* @param author
* @param type
*/
私有成员变量:所有成员变量(name, price, author, type)都被声明为 private,这意味着它们不能被外部类直接访问。
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;
}
公共方法:提供了公共的 getter 和 setter 方法来访问和修改私有成员变量。这些方法允许受控的访问和修改对象的状态。
@Override
public StringtoString() {
return "Book{" +
"name='" +name +'\'' +
", price=" +price +
", author='" +author +'\'' +
", type='" +type +'\'' +
'}';
}
@Override public String toString():重写了 Object 类的 toString 方法,用于提供 Book 对象的字符串表示。这个方法返回一个格式化的字符串,包含所有书的属性。
package cn.lnfvc.ken;
public class Text5 {
public static void main(String[] args) {
Book book =new Book("java基础笔记",99.6,"林信良","编程类");
System.out.println(book.toString());
}
}
构造函数:提供了一个公共的构造函数来初始化对象的状态