封装
如何实现封装:
修改属性的可见性,使用关键字private,属性私有化
创建公有的setter and getter方法
在setter and getter方法中加入属性控制语句
封装的优点:
便于使用者正确使用系统,防止错误修改属性
有助于系统之间的松耦合,提高系统独立性
提高软件的可重用性
降低了构建大型系统的风险
实例
“狗”类的封装
private String name;
private String sex;
private int health;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public void yes(){
System.out.println("我的名字叫"+name+",健康值是"+health+",和主人的亲密度是0,我的性别是"+sex);
}
public Dog(String name, String sex, int health) {
this.name = name;
this.sex = sex;
this.health = health;
}
“企鹅”类的封装
private String name;
private int health;
private int love;
private String sex;
public void setName(String name) {
this.name = name;
}
public void setHealth(int health) {
if (health<0||health>100){
System.out.println("输入的健康值有误,默认值为50");
health = 50;
}
this.health = health;
}
public void setLove(int love) {
if (love<0||love>100){
System.out.println("输入端亲密值有误,默认值为20");
love = 20;
}
this.love = love;
}
public void setSex(String sex) {
if (sex==null||(!sex.equals("母")&&!sex.equals("公"))){
System.out.println("输入有误,只有公母可以,默认值为公");
sex = "公";
}
this.sex = sex;
}
public String getName() {
return name;
}
public int getHealth() {
return health;
}
public int getLove() {
return love;
}
public String getSex() {
return sex;
}
public void sayHello(){
System.out.println("我叫"+name+",我是一只"+sex+"企鹅,我的健康值为"+health+",我与主人的亲密度为"+love);
}
public Penguin(){
}
public Penguin(String name,int health,int love,String sex){
setName(name);
setHealth(health);
setLove(love);
setSex(sex);
}
访问修饰符
static修饰符
成员变量:静态变量,可以直接通过类名访问
成员方法:静态方法,可以直接通过类名访问
代码块:静态代码块,当Java虚拟机加载类时,就会执行该代码块
静态方法:可直接通过类名访问
静态方法中不能使用this和super
不能直接访问所属类的实例变量和实例方法
可直接访问类的静态变量和静态方法
实例方法:通过实例访问
可直接访问所属类的静态变量、静态方法、实例变量和实例方法
静态方法必须被实现
继承
Pet类是Dog类和Peguin类的父类
private String name;
private int health;
private int love;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public Pet() {
System.out.println("父类的构造方法");
}
在类名后使用extends继承父类
子类访问父类成员
访问父类构造方法 super(); super(name);
访问父类属性 super.name;
访问父类方法super();
#super关键字来访问父类的成员
super只能出现在子类的方法和构造方法中
super调用构造方法时,只能是第一句
super不能访问父类的private成员