封装—该隐隐,该露露
将类的属性私有化,同时提供公共(public)方法来获取(get)和设置(set)方法
封装 即信息隐藏,利用抽象类,将数和操作封装到一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型内部,尽可能隐藏细节,只保留一些对外接口
用户无需知道细节,只需要通过接口访问对象
一个对象对象它所封装的是自我属性和方法,不需要其他对象就可完成自己的操作
四大好处:
1.良好的封装能减少耦合(两个或两个以上体系通过互相作用而彼此影响以至联合起来)
2.类内部结构可以自行修改
3.对成员进行更精确的控制
4.隐藏信息,实现细节
public class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
二.继承
(一)好处:
1.减少代码冗余,提高代码复用性
2.便于功能扩展
3.为之后多态性的使用提供前提
(二)格式:
class A extends B {
//extends意为 延伸,扩展
}
A :子类,派生类,subclass
B :父类,超类,基类,superclass
-
体现:
一旦子类A继承B后,子类A中就获取了父类B中声明的结构(所有属性和方法),特别,父类中声明为private的属性或方法,子类继承后,任然认为获取到所有属性及方法,只是应为封装性的影响,使得子类不能直接调用父类的结构 .
-
子类继承父类后,还可以声明自己特有的属性和方法,实现功能拓展
1.一个类可以被多个子类继承
2.一个类只能有一个父类(java中类的单继承性)
3.子类和父类是相对的,可多层继承
4.子类直接继承的称为直接父类,间接继承的称为间接父类
5.子类继承父类后,就获取了直接父类及间接父类中所有声明的属性和方法
(四)注意 :1.如果未显示声明一个父类,则此类继承于java.lang.Object类
2.所有的java类都直接或间接继承于java.lang.Object类,意味着所有的java类都具有java.lang.Object的功能
public class Person{
public void display(){
System.out.println("Play Preson");
}
static void display(Person person){
person.display();
}
}
public class Husband extends Person{ //Husband类继承Person类
public static void main(String[] args){
Husband husband = new Husband();
Person.display(husband); //向上转型,在下面详解
}
}
三.多态
①理解:
一个事物的多种形态
②何为多态:
对象的多态性: 父类的引用指向子类的对象(子类的对象赋给父类引用)
Animal a = new Dog();
编译期 a.eat() a的类型为Animal类,调用抽象的eat()方法
运行期 a指向的是一个Dog对象,运行Dog重写的eat()方法
③多态的使用:
虚拟方法调用
有了对象多态性后,编译只能调用父类中声明的,但运行时执行的是子类重写父类的
④使用前提:
1.有类的继承关系
2.有方法的重写
3.父类的引用指向子类的对象
⑤对象的多态性只适用于方法,不适用于属性(编译执行都看左边)
总结:①多态:编译看左边,执行看右边
②静态方法:编译,执行都看左边
③成员变量:编译,执行也都看左边
拓展:有了对象的多态后,内存中实际上加载了子类特有的属性和方法,但由于变量声明为父类,导致编译时只能调用父类,子类所特有的不能调用
如何解决?
① 向下转型或向上转型
向上: 多态
向下: 强制类型转换,可能会出现 Class Exception 异常
如何防止出现异常?
②Instanceof 关键字
用法: a instanceof A
作用: 判断a是否是A的实例.
若是,则返回true;不是,则返回false
适用情形: 为避免向下转型时出现异常,一旦返回true,就向下转型;返回false,则不转型
注:
若a instanceof A返回true, a instanceof B 也返回true
其中A为B的子类



