类的封装
封装的目的是为了保证变量的安全性,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员,如果不进行封装,类中的实例变量可以直接查看和修改,可能给整个代码带来不好的影响,因此在编写类时一般将成员变量私有化,外部类需要使用Getter和Setter方法来查看和设置变量。
java当中封装主要靠访问控制权限来进行实现的!
类的继承
在定义不同类的时候存在一些相同属性,为了方便使用可以将这些共同属性抽象成一个父类,在定义其他子类时可以继承自该父类,减少代码的重复定义,子类可以使用父类中非私有的成员。
比如说我们一开始使用的人类,那么实际上人类根据职业划分,所掌握的技能也会不同,比如画家会画画,歌手会唱,舞者会跳,Rapper会rap,运动员会篮球,我们可以将人类这个大类根据职业进一步地细分出来:
实际正这些划分出来的类,本质上还是人类,也就是说人类具有的属性,这些划分出来的类同样具有,但是,这些划分出来的类同时也会拥有他们自己独特的技能。在Java中,我们可以创建一个类的子类来实现上面的这种效果:
方法的重写:
重写:是将原本的东西给覆盖掉!
重载:方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数选择对应的方法。
重载两同三不同:
——同一个类,同一个方法名。
——不同:参数列表不同。(类型,个数,顺序不同)
只有返回值不同不构成方法重载。
只有形参的名称不同,不构成方法重载。
与普通方法一样,构造函数也可以重载
重写方法:
接口
接口只有抽象类中的抽象方法!!
抽象方法不能够有方法体!!
public class Teacher extends Person implements Study{
public Teacher(String name, int age, String sex) {
super(name, age, sex);
}
public void exam(){
System.out.println("我是老师,我不用考试,我直接给学生们出题!!");
}
public void study(){
}
}
implements用于实现这个接口,若接口中的方法没有在类中实现,那么就会报错!!
接口中的所有方法都要在类中实现的!!
JAVA中不能实现多继承,但是可以实现继承多个接口!!
实现多个接口只需要加个逗号就可以了!!
java中接口可以实现方法的默认实现!!——default 默认实现!!
默认实现方法不用在类中重新声明!!——也可以对接口重点 默认方法进行重写!!
@Override
public void test() {
Study.super.test();
}
重写接口中默认方法的时候,调用接口中的默认方法,需要先写上接口的名字.super.方法名
接口不同于类,接口中不允许存在成员变量和成员方法,但是可以存在静态变量和静态方法,在接口中定义的变量只能是:
接口中的静态变量是不能够进行修改的
接口中的静态方法的权限是不能够进行修改的,只能是public
克隆方法
因为克隆接口在object中是保护类型的!所以我们需要对克隆接口提升一下权限才可以使用!
public class Teacher extends Person implements Study,Cloneable{
//将克隆接口中的方法权限提升为Public
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
接口也是能继承其他接口的!!
枚举类