封装
1.封装的作用:
高内聚:封装细节,便于修改内部代码,提高可维护性;
低耦合:简化外部调用
2.封装实现–使用访问控制符
修饰符 | 同一个类 | 同一个包中 | 子类 | 所有类 |
---|---|---|---|---|
private | * | |||
default(默认) | * | * | ||
protected | * | * | * | |
public | * | * | * | * |
3.封装使用细节
1.属性一般使用private权限访问
属性私有后,提供相应的get/set方法来访问相关属性,这些方法通常用public修饰(boolean变量的get方法是is开头)
2.关于protected
- 若父类和子类在同一个包中,子类可访问父类的protected成员,也可访问父类对象的protected成员
- 若父类和子类不在同一个包中,子类可访问父类的protected成员,不能访问父类对象的protected成员
多态(polymorphism)
1.多态概念
同一个方法的调用,由于对象不同可能会有不同的行为。(因为对象对应的子类重写了父类的方法)
2.多态的要点
- 多态是方法的多态,与属性无关。
- 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象
- 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
3.类型的强制转化
随便转,但是编译通过只是一个语法检查而已,不代表程序可以跑起来。跑的时候是什么类型就执行什么类型的方法。
package polymophism;
/**
* @author DELL
*/
public class Animal {
public void shout() {
System.out.println("叫了一声");
}
}
class Dog extends Animal {
@Override
public void shout() {
System.out.println("旺旺");
}
void seeDoor() {
System.out.println("看门!");
}
}
class Cat extends Animal {
@Override
public void shout() {
System.out.println("喵喵");
}
public void catchMouse(){
System.out.println("猫抓老鼠");
}
}
class Mouse extends Animal {
@Override
public void shout() {
super.shout();
}
}
package polymophism;
/**
* @author DELL
*/
public class Test {
static void aniamlCry(Animal a) {
a.shout(); //多态!!!
}
public static void main(String[] args) {
Dog d = new Dog();
aniamlCry(d);
aniamlCry(new Cat());
/*向上类型转换,自动*/
Animal a = new Dog();
//强制类型转换
Dog d2 =(Dog) a;
d2.seeDoor();
/* Cat c3 =(Cat) a;
c3.catchMouse();
类型转换异常 */
if(a instanceof Dog){
Dog d3=(Dog) a;
d3.seeDoor();
}else if (a instanceof Cat){
Cat c4 =(Cat) a;
c4.catchMouse();
}
}
}
输出:
旺旺
喵喵
看门!
看门!