1 private关键字的应用
package cn.hncu_01; /* * 现实世界的事物: * 属性 * 行为 * * 在程序中,要表示一个事物,我们用类 * 成员变量(属性):姓名, 学号 * 成员方法(行为):学习 * * * 分析:按照我们现在的方法写代码,年龄可以赋值值为一个负数.但是这不符合现实的情况,怎么办? * 我们应该在给年龄赋值时,先判断一下年龄是否合理,如果合理,就赋值,否则要给出提示信息. * 但是,以上步骤需要一个方法来实现,所以,我们要写一个方法(成员方法). * * 写了设置年龄的方法后, 如果别人还是直接功过成员变量给age赋值,怎么办? * 这就是今天要学的,封装. * * 封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。 * 通过是用private关键字实现. * * private关键字 * 这个关键字可以修饰成员变量,也可以修饰成员方法. * 被private修饰的成员变量或成员方法,只能在本类中被访问. * * private 的应用: * 1.修饰成员变量,不让外界直接访问成员变量. * 2.对外界提供公共的方法访问成员变量.getXxx(),setXxx() */ class Student { //成员变量 private String name; private int age; //成员方法 private void study(){ System.out.println("good good study, day day up!"); } public void setAge(int i){ //年龄合法 if(0<=i&&i<=150){ age = i; }else{ System.out.println("年龄不合法"); } } } //测试类 public class Demo { public static void main(String[] args) { //新建一个学生对象 Student s = new Student();
//访问成员变量 //s.age =-1;
s.setAge(100); //s.age =-1; //调用成员方法 //s.study(); } } |
package cn.hncu_02; /* * 成员变量用private修饰,对外提供公共接口的学生类 */ class Student { //成员变量 private String name; private int age; //成员方法--一组getXxx()和setXxx() public void setName(String s){ name = s; } public void setAge(int i){ age = i; } public String getName() { return name; } public int getAge() { return age; } public void myPrintf(){ System.out.println(name + "---" + age); } } public class Demo { public static void main(String[] args) { Student s = new Student(); s.setName("张三"); s.setAge(20);
s.myPrintf(); } } |
2. this关键字
package cn.hncu_02; /* * 成员变量用private修饰,对外提供公共接口的学生类 * * 我们说,程序中变量名要做到见名知意,所以String s , int i 这样的鸣鸣,不符合我们的规范,怎么办? * 这就是我们现在要学的:this关键字 * * this关键字:代表本类的引用. * 哪个对象调用方法或成员变量,哪个对象就是this * * this关键的应用场景: * 解决局部变量隐藏成员变量的问题. * */ class Student { // 成员变量 private String name; private int age; // 成员方法--一组getXxx()和setXxx() public void setName(String name) { //name = s; this.name = name; } public void setAge(int age) { //这就是局部变量隐藏成员变量的问题 //左边的age应该是成员变量 //右边的age应该是方法的参数传过来的,局部变量 this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void myPrintf() { System.out.println(name + "---" + age); } } public class Demo { public static void main(String[] args) { Student s = new Student(); s.setName("张三"); s.setAge(20);
s.myPrintf(); System.out.println(s.getName() + ":" + s.getAge()); } } |
package cn.hncu_02; /* * 再写手机类 */ class Phone { private String brand; private double price; private String color;
public void setBrand(String brand) { this.brand = brand; } public void setPrice(double price) { this.price = price; } public void setColor(String color) { this.color = color; } public String getBrand() { return brand; } public double getPrice() { return price; } public String getColor() { return color; } } public class Demo2 { public static void main(String[] args) { Phone p = new Phone(); p.setBrand("华为mate30"); p.setPrice(7200); p.setColor("土豪金"); System.out.println(p.getBrand() + ":" + p.getPrice() + ":" + p.getColor()); } } |
3.构造方法
package cn.hncu_03; /* * 构造方法: * 1. 什么是构造方法 * 构造方法用于初始化成员变量的. * 用于创建对象 * 格式: * 方法名与类名相同. * 方法没有返回值,连void也没有 * * 到目前为止,初始化成员变量的方法有几种? * (1) setXxx() * (2) 构造方法. * * 思考: * 在前面的例子中, 我们并没有写构造方法,那么建对象时,构造方法是从哪里来的? * 如果你自己没有提供构造方法,系统会给你添加一个默认的无参构造方法.为什么会这样? * java中任何类都继承自Object类,无参构造是继承自Object类的. * * * 注意: * 1. 构造方法可以重载 * 2. 如果自己给出了带参构造方法,系统将不会提供无参构造. * 所以, 在写构造方法时,建议永远先写无参构造方法,再写带参构造方法. */ class Student { private String name; private int age; //无参构造 Student(){ } Student(String name ,int age){ this.name = name; this.age = age; } public void myPrintf(){ System.out.println(name + "--" + age); } } public class Demo { public static void main(String[] args) { Student s1 = new Student("班长", 20); s1.myPrintf(); Student s2 = new Student(); s2.myPrintf(); } } |
4 标准类的写法
package cn.hncu_04; /* * Java中标准类的写法: * 一个类由3个部分组成 * 成员变量 * 构造方法 * 无参构造 * 带参构造 * 成员方法 * getXxx() * setXxx() * * 需求: 写一个标准的学生类 */ class Student { //成员变量 private String name; private int age; //无参构造 public Student() { } //带参构造 public Student(String name, int age) { this.name = name; this.age = 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 void myPrintf(){ System.out.println(name + "--" + age); } } //标准测试类的写法 public class Demo { public static void main(String[] args) { //1.测试无参构造 Student s1 = new Student(); s1.setName("班长"); s1.setAge(20); System.out.println(s1.getName() + "---" + s1.getAge()); //2. 测试带参构造 Student s2 = new Student("学委",19); s2.myPrintf(); } } |
package cn.hncu_04; /* * 重写手机类 */ class Phone { //成员变量 private String brand; private double price; private String color; //无参构造 public Phone() { } //带参构造 public Phone(String brand, double price, String color){ this.brand = brand; this.price = price; this.color = color; } //get和set方法 public void setBrand(String brand){ this.brand = brand; } public void setPrice(double price){ this.price = price; } public void setColor(String color){ this.color = color; } public String getBrand(){ return brand; } public double getPrice(){ return price; } public String getColor(){ return color; } } public class Demo2 { public static void main(String[] args) { Phone p1 = new Phone(); p1.setBrand("苹果"); p1.setPrice(6999); p1.setColor("白色"); System.out.println(p1.getBrand()+"---" + p1.getPrice()+"---" + p1.getColor()); //------------------------- Phone p2 = new Phone("vivo",2999,"呕吐绿"); System.out.println(p2.getBrand()+"---" + p2.getPrice()+"---" + p2.getColor()); } } |
package cn.hncu_05; /* * 定义一个类Demo,其中定义一个求两个数据和的方法,定义一个测试类Test,进行测试。 */ class Demo { //成员变量 private int x; private int y; //构造方法 public Demo(){ } public Demo(int x, int y){ this.x = x; this.y =y; } //成员方法 public void setX(int x){ this.x = x; } public void setY(int y){ this.y = y; } /*public int getX(){ return x; } public int getY(){ return y; }*/ public int sum(){ return x+y; } } public class Test { public static void main(String[] args) { Demo d1 = new Demo(); d1.setX(10); d1.setY(20); System.out.println(d1.sum()); } } |
package cn.hncu_06; /* * 定义一个类Demo,其中定义一个求两个数据和的方法,定义一个测试类Test,进行测试。 */ class Demo { public int sum(int x, int y){ return x+y; } } public class Test { public static void main(String[] args) { Demo demo = new Demo(); System.out.println(demo.sum(10, 20));
} } |
package cn.hncu_07; /* * 定义一个类MyMath,提供基本的加减乘除功能,然后进行测试。 */ class MyMath { //加 public int sum(int x, int y){ return x+y; } //减 public int sub(int x ,int y){ return x-y; } //乘 public int mul(int x, int y ){ return x*y; } //除 public int div(int x, int y){ return x/y; } } public class Demo { public static void main(String[] args) { MyMath mm = new MyMath(); System.out.println(mm.sum(20, 10)); System.out.println(mm.sub(20, 10)); System.out.println(mm.mul(20, 10)); System.out.println(mm.div(20, 10)); } } |
练习:
- 定义一个类Demo,其中定义一个求两个数据和的方法,定义一个测试类Test,进行测试。
- 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test2,进行测试。
- 定义一个员工类,自己分析出几个成员,然后给出成员变量,构造方法,getXxx()/setXxx()方法,以及一个显示所有成员信息的方法。并测试。
- 定义一个类MyMath,提供基本的加减乘除功能,然后进行测试。