案例:
封装一个狗类,属性有名字,年龄,品种,提供对外接口,通过接口才能访问属性和修改属性,修改年龄属性时需要验证合法性.有构造函数先给这些属性赋值
package heihei;
public class 狗类 {
public static class dog{
private int age;//私有化变量
private String name;
private String variety;
dog(int age,String name,String variety){//有参函数
this.age=age;//关键字this区别变量
this.name=name;
this.variety=variety;
}
void setAge(int age) {//setter函数设置私有属性
if(age>0 && age<12) {
this.age=age;
}else {
System.out.print("这不是正经的狗子");
}
}
void setName(String name) {
this.name=name;
}
void setVariety(String variety) {
this.variety=variety;
}
int getAge() {//getter函数获取私有属性
return this.age;
}
String getName() {
return this.name;
}
String getVarity() {
return this.variety;
}
public static void main(String[] args) {
dog m=new dog(10,"狗肉","博美");
System.out.println("年龄:"+m.getAge());
System.out.println("名字:"+m.getName());
System.out.println("品种:"+m.getVarity());
m.setAge(15);//超过范围
}
}
}
访问权限
setter和getter函数
问题:通常我们会把属性设置为私有的,那么我们怎么获取或修改这些私有的属性呢?
- 这时我们可以定义类内的公有函数,在这个公有函数里进行获取私有属性(类内没有权限),然后在类的外面调用这个函数来获取私有属性,设置私有属性也可以同样使用这种方法
- 一般我们把设置私有属性的函数叫setter,获取私有属性的函数叫getter
关键字this
- this是对象本身,谁调用类函数,就是谁
- 作用:当形参和成员变量重名是用this区分
关键字supper
- 当父类没有无参构造时,子类这时创建不了对象,可以在子类的构造函数中使用super调用父类的构造函数,这样子类的对象就可以创建
- super必须写在子类的构造函数第一行
- 当子类和父类有同名成员时,优先调用子类的,但可以使用super调用从父类继承过来的成员
- 子类从父类继承过来的私有变量证明