JAVA面向对象

面向对象的思想是一种程序设计的方法论,它将程序的设计和实现分解为对象的创建、操作和交互。面向对象的思想将现实世界中的事物抽象为对象,每个对象包含属性(数据)和方法(行为),并且具有封装、继承和多态的特性。

面向对象的思想强调将程序划分为独立的对象,每个对象负责自己的任务,对象之间通过消息传递的方式交互。这种方式可以提高代码的可维护性、可复用性和可扩展性,使程序更易于理解和修改。

面向对象的思想还提供了一种抽象的方法,通过定义类来描述对象的共同特征和行为,从而实现代码的模块化和组件化。通过继承机制,可以创建新的类并从现有类继承属性和方法,从而减少代码的重复和冗余。

面向对象的特点主要有以下几点:

  1. 封装:将数据和对数据的操作封装在一起,形成一个类,外部只能通过类的接口来访问和操作数据,从而实现了数据的隐藏和保护。

  2. 继承:通过继承,子类可以继承父类的属性和方法,从而减少代码的重复性。并且通过继承,可以实现多态性,即同一个方法可以根据不同的对象调用不同的实现。

  3. 多态:同一种类型的对象,执行同一个方法时,可以有不同的行为表现,这就是多态性。多态性可以提高代码的灵活性和可扩展性。

  4. 抽象:通过抽象,可以将一类对象的共同特征和行为抽象出来,形成类的继承层次结构。抽象可以隐藏对象的具体实现细节,只对外提供接口,从而降低系统的复杂性。

  5. 接口:接口定义了对象与外界之间的通信协议。通过接口,可以实现类之间的松耦合,增加代码的可维护性和可扩展性。

总结来说,面向对象的思想是一种以对象为中心的程序设计方法,通过将程序分解为独立的对象来实现代码的可维护性、可复用性和可扩展性。它是现代软件开发中广泛使用的一种编程范式。

封装

在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

  • 隐藏实现细节

  • 提高代码的可维护性

  • 提供接口

  • 实现数据封装和保护

实现封装

Java通过访问修饰符来实现封装,主要有public、private和protected三种修饰符。

  1. public修饰符:使用public修饰的成员变量和成员方法可以被任何类访问。

  2. private修饰符:使用private修饰的成员变量和成员方法只能被自身类中的其他成员访问,其他类无法直接访问。

  3. protected修饰符:使用protected修饰的成员变量和成员方法可以被自身类、同一包内的其他类以及不同包中的子类访问。

封装还可以通过getter和setter方法来实现。

  1. getter方法:用于获取私有成员变量的值,一般以get开头,返回该成员变量的值。
private String name;

public String getName() {
    return name;
}
  1. setter方法:用于设置私有成员变量的值,一般以set开头,接收一个参数,将参数的值赋给该成员变量。
private int age;

public void setAge(int age) {
    this.age = age;
}

通过getter和setter方法,可以在类的外部访问私有成员变量,同时可以对成员变量的值进行控制和验证。这种方式更加安全和灵活,也符合面向对象编程的封装特性。

案例

题目1

 定义一个类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
题目2 

首先定义一个计算长方形面积的类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
 题目3

设计一个表示图书的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
题目4

请创建一个银行帐户类,要求如下:(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

继承

抽象类

接口

包 

多态(接下来都会慢慢更的...)

你可能感兴趣的:(java,开发语言)