面向对象2---封装,this,构造方法

xiaoxiao2021-02-28  121

一.封装(private)

封装:把成员变量/方法私有化,在基本类里面提供他们公共的访问方法

private关键字的作用:

私有的,不可访问的private可以修饰成员变量,也可以修饰成员方法被private修饰的成员只能在本类中访问,外界不能访问

公共的访问方法:set和/get方法(快捷键:Alt+Shift+s r)

/* * 一个手机类: * 成员变量:brand,price,color(将成员变量私有化,提供公共的访问方式) * 成员方法:手机特有的功能:打电话/玩游戏(将玩游戏的方法私有化) * */ //手机类 class Phone{ private String brand; private int price; private String color; //提供公共的访问方法 public String getBrand() { return brand; } public void setBrand(String b) { b = brand; } public int getPrice() { return price; } public void setPrice(int p) { p = price; } public String getColor() { return color; } public void setColor(String c) { c = color; } //打电话的成员方法 public void call(){ System.out.println("打电话"); } //发短信的成员方法 private void playGames(){ System.out.println("玩游戏"); } } //测试类 public class Demo { public static void main(String[] args){ //创建手机类的对象 Phone p = new Phone(); //利用公共的访问方法给变量赋值 p.setBrand("美图"); p.setColor("粉色"); p.setPrice(3500); //报错,成员变量是私有的,必须用公共的访问方法 // System.out.println(p.Brand()+","+p.Color()+","+p.Price()); System.out.println(p.getBrand()+","+p.getColor()+","+p.getPrice()); p.call(); //报错,私有的成员方法,只能在本类中访问,外界不能访问 // p.playGames(); } }


二.this关键字

this关键字:代表所在类的对象引用this的应用场景:局部变量隐藏成员变量 /* * 一个手机类: * 成员变量:brand,price,color(将成员变量私有化,提供公共的访问方式) * 成员方法:手机特有的功能:打电话/玩游戏(将玩游戏的方法私有化) * */ //手机类 class Phone1{ private String brand; private int price; private String color; //提供公共的访问方法 public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; //第一个brand为成员变量,第二个为局部变量 //局部变量和成员变量名称一致:就近原则:局部变量隐藏了成员变量 //为了区分成员变量和局部变量java提供了this关键字 } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } //打电话的成员方法 public void call(){ System.out.println("打电话"); } //发短信的成员方法 private void playGames(){ System.out.println("玩游戏"); } } //测试类 public class Demo2 { public static void main(String[] args){ //创建手机类的对象 Phone1 p = new Phone1(); //利用公共的访问方法给变量赋值 p.setBrand("美图"); p.setColor("粉色"); p.setPrice(3500); System.out.println(p.getBrand()+","+p.getColor()+","+p.getPrice()); p.call(); } }


三.构造方法

构造方法:给对象的数据进行初始化

构造方法格式:

方法名与类名相同没有返回值类型,连void都没有没有具体的返回值

构造方法的注意事项:

如果你不提供构造方法,系统会给出默认的无参构造方法如果你提供了构造方法,系统将不再提供构造方法也是可以重载的 class Student{ private String name; private int age; //提供公共的访问方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //提供构造方法,构造方法是可以重载的 //带有一个参数的构造方法 public Student(String name){ this.name = name; } //带两个参数的构造方法 public Student(String name,int age){ this.name = name; this.age = age; } } public class Demo { public static void main(String[] args){ Student s1 = new Student("王一"); s1.setAge(20); System.out.println(s1.getName()+","+s1.getAge()); Student s2 = new Student("王二",22); System.out.println(s2.getName()+","+s2.getAge()); } }

4. Student s = new Student()这一句话做了几件事情? Student s在栈内存中分配空间 new Student()在堆内存中申请空间 通过加载Student类加载成员变量(默认的初始化值) 显示初始化(通过构造方法对数据进行初始化) 通过创建对象进行赋值操作 给堆内存标记一个内存空间的地址值,Student s里面的地址值间接的指向

转载请注明原文地址: https://www.6miu.com/read-38797.html

最新回复(0)