(封装、继承、多态)
1、封装:
(1)访问控制:体现封装,则需要掌握访问控制符
• public(接口访问权限)
• protected(包访问权限、继承访问权限)
• “默认”(包访问权限)
• private(无法直接访问)
在java中这些修饰符可以用于:
修饰类
修饰类的属性成员(域)
修饰类的成员方法
类前修饰符为public时,当属性和方法前的修饰符为public时,则该属性可以被所有类访问;当属性和方法前为protected修饰时,对于类定义而言,可以被同包中的类和所有子类访问(子类和父类可以不在同一个包中),也就是B+C范围,但对于对象而言,只能被同一个包的类对象所访问,也就是B的范围;当为默认时,只能被同包中的类所访问(比protected访问权限小);当为private时,只能被本类内部所访问 。
2、继承
①通过extends关键字实现;
②子类继承了父类的所有属性和方法, 但只有public、protected的属性和方法在子类是可见的。
子类在继承父类的时候,首先应该满足父类可被访问,例如当子类和父类不在同一个包当中时,父类修饰符必为public;在父类能被访问的前提下,凡是修饰符为public或是protected的父类属性成员或是方法能被子类所访问;private的属性成员或是方法则不能被访问。
Object类: Object类是所有类的共同祖先,即使定义类时没有写extents Object。 在Object当中定义了许多方法,这些方法都可以被所有子类所继承。
3、多态:
①多态的概念:多态是指一个程序中同名的不同方法共存的情况
②Java中提供两种多态的机制:重载(overloading)与覆盖(overriding)
(1)重载例子: //参数不同
class Parent{
public intgetScore(){
return 3;
}
public intgetScore(int i){
return i;
}
}
(2)覆盖:子类对父类的同名方法(方法名称相同,参数相同,返回 类型相同)重新进行定义,即在子类中定义与父类中已定义的相同名而内容不同的方法
方法名称相同,参数名称相同,返回类型相同:覆盖
方法名称相同,参数名称不同:重载
方法名称相同,参数名称相同,返回类型不同:编译不能通过
覆盖例1:
覆盖例2:
覆盖——注意:
①子类的访问修饰符权限应等于或大于父类
①同名的static方法和非static方法不能相互覆盖
③方法前有final修饰符,此方法不能在子类方法中进行覆盖
④在JDK中,很多父类的方法被子类重新覆盖,赋予了不同的含义,如Object类中的booleanequals(Object obj)方法
⑤抽象类中如果存在抽象方法,则具体子类必须对抽象方法进行覆盖