面向对象的思想是一种程序设计的方法论,它将程序的设计和实现分解为对象的创建、操作和交互。面向对象的思想将现实世界中的事物抽象为对象,每个对象包含属性(数据)和方法(行为),并且具有封装、继承和多态的特性。
面向对象的思想强调将程序划分为独立的对象,每个对象负责自己的任务,对象之间通过消息传递的方式交互。这种方式可以提高代码的可维护性、可复用性和可扩展性,使程序更易于理解和修改。
面向对象的思想还提供了一种抽象的方法,通过定义类来描述对象的共同特征和行为,从而实现代码的模块化和组件化。通过继承机制,可以创建新的类并从现有类继承属性和方法,从而减少代码的重复和冗余。
面向对象的特点主要有以下几点:
封装:将数据和对数据的操作封装在一起,形成一个类,外部只能通过类的接口来访问和操作数据,从而实现了数据的隐藏和保护。
继承:通过继承,子类可以继承父类的属性和方法,从而减少代码的重复性。并且通过继承,可以实现多态性,即同一个方法可以根据不同的对象调用不同的实现。
多态:同一种类型的对象,执行同一个方法时,可以有不同的行为表现,这就是多态性。多态性可以提高代码的灵活性和可扩展性。
抽象:通过抽象,可以将一类对象的共同特征和行为抽象出来,形成类的继承层次结构。抽象可以隐藏对象的具体实现细节,只对外提供接口,从而降低系统的复杂性。
接口:接口定义了对象与外界之间的通信协议。通过接口,可以实现类之间的松耦合,增加代码的可维护性和可扩展性。
总结来说,面向对象的思想是一种以对象为中心的程序设计方法,通过将程序分解为独立的对象来实现代码的可维护性、可复用性和可扩展性。它是现代软件开发中广泛使用的一种编程范式。
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
隐藏实现细节
提高代码的可维护性
提供接口
实现数据封装和保护
Java通过访问修饰符来实现封装,主要有public、private和protected三种修饰符。
public修饰符:使用public修饰的成员变量和成员方法可以被任何类访问。
private修饰符:使用private修饰的成员变量和成员方法只能被自身类中的其他成员访问,其他类无法直接访问。
protected修饰符:使用protected修饰的成员变量和成员方法可以被自身类、同一包内的其他类以及不同包中的子类访问。
封装还可以通过getter和setter方法来实现。
private String name;
public String getName() {
return name;
}
private int age;
public void setAge(int age) {
this.age = age;
}
通过getter和setter方法,可以在类的外部访问私有成员变量,同时可以对成员变量的值进行控制和验证。这种方式更加安全和灵活,也符合面向对象编程的封装特性。
定义一个类Person,定义name和age私有属性,定义有参的构造方法对name和age进行初始化。在测试类中创建该类的2个对象,姓名、年龄分别为lili、19和lucy、20,在屏幕打印出2个对象的姓名和年龄。
代码
package DEMO230201.encapsulationdemo;
class Person {
private String name;//私有属性
private int age;//私有属性
public Person(String name, int age){//定义有参的构造方法
this.name=name;
this.age=age;
}
public void read(){ //在屏幕打印出对象的姓名和年龄的方法
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class encapsulation1 {
public static void main(String[] args){
Person p1=new Person("lili",19);
Person p2=new Person("lucy",20);
p1.read();
p2.read();
}
}
运行结果
姓名:lili,年龄:19
姓名:lucy,年龄:20
首先定义一个计算长方形面积的类rectangle,要求类中有一个定义长方形左上角和右下角座标的构造函数,以及一个通过长方形右下角座标与左上角座标计算长方形面积,并实例化两个长方形进行测试。
代码
package DEMO230201.encapsulationdemo;
class Rectangle{
int topLeftX; //左上的x坐标
int topLeftY; //左上的y坐标
int bottomRightX; //右下的x坐标
int bottomRightY; //右下的y坐标
public Rectangle(int topLeftX,int topLeftY,int bottomRightX,int bottomRightY){
this.topLeftX=topLeftX;
this.topLeftY=topLeftY;
this.bottomRightX=bottomRightX;
this.bottomRightY=bottomRightY;
}
public void area(){ //计算长方形面积的方法
int len=bottomRightX-topLeftX;
int wid=topLeftY-bottomRightY;
System.out.println("长方形面积为:"+len*wid);
}
}
public class encapsulation2 {
public static void main(String[] args) {
Rectangle r1=new Rectangle(1,8,2,6); //实例化第一个例子
r1.area();
Rectangle r2=new Rectangle(0,2,2,0); //实例化第二个例子
r2.area();
}
}
运行结果
长方形面积为:2
长方形面积为:4
设计一个表示图书的Book类,它包含图书的书名、作者、月销售量等私有属性,另有两个构造方法(一个不带参数,另一个带参数),成员方法setBook( ) 和printBook()分别用于设置和输出书名、作者、月销售量等数据。并设计相应的测试Book类的应用程序主类,测试并显示输出提供所有功能的结果。
代码
package DEMO230201.encapsulationdemo;
class Book{
private String title;
private String author;
private int monthlySales;
public Book(){ //无参构造
}
public Book(String title,String author,int monthlySales){ //有参构造
this.title=title;
this.author=author;
this.monthlySales=monthlySales;
}
public void setTitle(String title){
this.title=title;
}
public void setAuthor(String author){
this.author=author;
}
public void setMonthlySales(int monthlySales){
this.monthlySales=monthlySales;
}
public void printBook(){
System.out.println("本书的书名:"+title+",作者:"+author+",月销售量:"+monthlySales);
}
}
public class encapsulation3 {
public static void main(String[] args){
Book b1=new Book();
b1.setTitle("尘埃落定");
b1.setAuthor("阿来");
b1.setMonthlySales(100000);
b1.printBook();
Book b2=new Book("命运","蔡崇达",200000);
b2.printBook();
}
}
运行结果
本书的书名:尘埃落定,作者:阿来,月销售量:100000
本书的书名:命运,作者:蔡崇达,月销售量:200000
请创建一个银行帐户类,要求如下:(1)类包括帐户名、帐户号、存款额等私有属性;(3)有三个参数的构造方法(2)可实现余额查询,存款和取款的操作。(3)创建该类的对象,验证以上两项。
代码
package DEMO230201.encapsulationdemo;
class BankAccount{
private String accountName;
private String accountNumber;
private int depositAmount;
public BankAccount(String accountName,String accountNumber,int depositAmount){
this.accountName=accountName;
this.accountNumber=accountNumber;
this.depositAmount=depositAmount;
}
public void balanceInquiry(){ //余额查询
System.out.println("您好!您的帐户名:"+accountName+",您的帐户号:"+accountNumber+",您当前余额还剩:"+depositAmount);
}
public void deposit(int money){ //存款
depositAmount=depositAmount+money;
System.out.println("存款成功,当前余额还剩:"+depositAmount);
}
public void Withdrawal(int money){ //取款
depositAmount=depositAmount-money;
System.out.println("取款成功,当前余额还剩:"+depositAmount);
}
}
public class encapsulation4 {
public static void main(String[] args){
BankAccount b1=new BankAccount("R","1818181818",1000000);
b1.balanceInquiry();
b1.deposit(100000);
b1.Withdrawal(1000);
}
}
运行结果
您好!您的帐户名:R,您的帐户号:1818181818,您当前余额还剩:1000000
存款成功,当前余额还剩:1100000
取款成功,当前余额还剩:1099000
继承
抽象类
接口
包
多态(接下来都会慢慢更的...)