【Java学习2】面向对象之封装

类与对象的基本定义

/*
class 类名称{
	数据类型 属性;
	方法;
}
类名称 对象名称 = new 类名称();
*/
class book{
    String title;//书名
    double price;//书的价格
    public void getinfo(){ //方法
        System.out.print("book name:" + title + "price:" + price);
    }
}
public class Text{
    public static void main(String args[]){
       book b1 = new book();
       b1.title = "java";
       b1.price = 86.4;
       b1.getinfo();
    }
}

内存空间概念

  • 堆内存:保存每一个对象的属性内容,堆内存需要使用关键字new才可以开辟,如果一个对象没有对应的堆内存指向,将无法使用,称之为垃圾,保存的是对象正真数据。
  • 栈内存:保存的是一块堆内存地址数值,每一块栈内存只能保留一块堆内存地址。

使用private关键字封装属性

使用了private关键修饰属性后,只能在book类中被访问,而其他类不能直接访问。
定义原则:类中所有属性都要使用private声明,如果属性需要被外部所使用,那么定义相应的setter、getter方法。

class book{
    private String title;
    private double price;
    public void getinfo(){ 
        System.out.print("book name:" + title + "price:" + price);
    }
}
public class Text{
    public static void main(String args[]){
       book b1 = new book();
       b1.title = "java"; //无法从外部进行赋值
       b1.price = 86.4;
       b1.getinfo();
       /*
    The field book.title is not visible
	The field book.price is not visible
       */
    }
}

使用setter和getter

class book{
    private String title;
    private double price;
    public void setTitle(String t){
        title = t;
    }
    public String getTitle(){
        return title;
    }
    public void setPrice(double d){
        price = d;
    }
    public Double getPrice(){
        return price;
    }
    public void getinfo(){ 
        System.out.print("book name:" + title + "\n price:" + price);
    }
}
public class Text{
    public static void main(String args[]){
       book b1 = new book();
       b1.setTitle("JAVA");
       b1.setPrice(86.4);
       b1.getinfo();
       
    }
}

在实际开发中,属性使用private封装后,必须定义相应的setter、getter方法,不管是否需要使用。

构造方法

可通过构造方法为对象实例化时进行一些初始化准备工作,构造方法本身是一种特殊的方法,它只在新对象实例化时调用
定义原则:方法名称和类名称相同,没有返回值类型声明,当然,构造方法也可以重载。

class book{
    public book(){
        System.out.print("对象实例化时我才被调用");
    }
}
public class Text{
    public static void main(String args[]){
       book b1 = new book(); //输出 对象实例化时我才被调用
    }
}

构造方法与普通方法的区别:构造方法没有定义返回值类型,而普通方法必须定义返回值类型,如果没有返回,也必须用void使用。

使用构造方法初始化属性值

class book{
    private String title;
    private Double price;
    public book(String s,Double d){
        title = s;
        price = d;
    }
    public String getInfo(){
        return "title:" + title + "\n price:" + price;
    }
}
public class Text{
    public static void main(String args[]){
       book b1 = new book("JAVA",86.5);
       System.out.print(b1.getInfo());
    }
}

构造方法重载

class book{
    private String title;
    private Double price;
    public book(){
        return "无参构造方法,即默认构造方法";
    }
    public book(String s,Double d){
        title = s;
        price = d;
    }
    public String getInfo(){
        return "title:" + title + "\n price:" + price;
    }
}
public class Text{
    public static void main(String args[]){
       book b1 = new book("JAVA",86.5);
       System.out.print(b1.getInfo());
    }
}

匿名对象

没有栈内存指向堆内存的对象就是匿名对象

class book{
    private String title;
    private Double price;
    public book(String s,Double d){
        title = s;
        price = d;
    }
    public void getInfo(){
        System.out.print("title:" + title + "\n price:" + price);
    }
}
public class Text{
    public static void main(String args[]){
        new book("JAVA",86.5).getInfo(); //匿名对象
    }
}

简单Java类

简单Java类是一种在实际开发中使用最多的类定义形式,有如下要求:

  • 类名称必须有意义
  • 类中所有属性必须private封装,封装后的属性必须提供setter、getter
  • 类中可以提供任意多个构造方法,但是必须保留一个无参即默认构造方法
  • 类中不允许出现任何输出语句,所有信息输出必须交给被调用处嗲用
  • 类中需要提供一个取得对象完整信息的方法,如getInfo()方法,且返回类似为String
class Book{
    private String title;
    private Double price;
    public void setTitle(String s){
        title = s;
    }
    public String getTitle(){
        return title;
    }
    public void setPrice(Double d){
        price = d;
    }
    public Double getPrice(){
        return price;
    }
    public Book(){}
    public Book(String s,Double b){
        title = s;
        price = b;
    }
    public String getInfo(){
        return "title:" + title + "\n price:" + price;
    }
}
public class Text{
    public static void main(String args[]){
        Book b1 = new Book();
        b1.setTitle("JAVA");
        b1.setPrice(86.3);
        System.out.println(b1.getInfo());
        Book b2 = new Book("python",56.1);
        System.out.println(b2.getInfo());
    }
}

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/85256971