面向对象的三大特性
封装
- 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
- 低耦合:仅对外暴露少量的方法用于使用
-
权限修饰符
private:类内部 (缺省):同一个包 protected:同一个包和不同包的子类 public:同一个工程 (修饰的内部结构:属性、方法、构造器、内部类)
修饰符 类内部 同一个包 不同包的子类 同一个工程 private Yes (缺省) Yes Yes protected Yes Yes Yes public Yes Yes Yes Yes -
信息的封装与隐藏
- 将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作
- 作用:只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作
-
对于class的权限修饰只可以用public和default(缺
- public类可以在任意地方被访问
- default类只可以被同一个包内部的类访问
package和import
-
package关键字的使用
1、使用package声明类和接口所属的包,声明在源文件的首行 2、通常使用所在公司域名的倒置 3、package语句中,用“.”来指明包的层次
-
import关键字的使用
1、在源文件中使用import显式的导入指定包下的类或接口 2、声明在包的声明和类的声明之间 3、可以使用“xxx.*”的方式,导入xxx包下的所有结构 4、如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句 5、如果在代码中使用不同包下的同名的类,需要使用类的全类名的方式指明调用的是哪个类 6、如果已经导入xxx包下的类,再需要使用xxx包的子包下的类的话,仍然需要导入 7、import static静态导入:导入指定类或接口下的静态的属性或方法
继承
-
类的继承
1、子类继承了父类,就继承了父类的方法和属性,子类也可以创建新的数据和方法 2、子类不能直接访问父类中私有的(private)的成员变量和方法 3、Java只支持单继承和多层继承,不允许多重继承 4、如果我们没有显示的声明一个类的父类的话,则此类继承于java.lang.Object类,所以所有的java类(除Object类之外)都直接或间接的继承于Object类
-
方法的重写
1、子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表 2、子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限 >特殊情况:子类不能重写父类中声明为private权限的方法 3、子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型 >特别的:子类重写的方法的返回值类型为void(基本数据类型)时,父类被重写的方法的返回值类型也必须为void(基本数据类型) 4、子类重写的方法抛出的异常不能大于父类被重写方法的异常 5、子类与父类中同名同参数的方法必须同时声明为非static的(即为重写),或者同时声明为static的(不是重写)。因为static方法是属于类的,子类无法覆盖父类的方法
super
-
super调用属性和方法(父类的内存空间的标识)
1、当子父类出现同名成员时,可以用super表明调用的是父类中的成员 2、super的追溯不仅限于直接父类 3、通常情况下,省略"super."
-
super调用构造器
1、子类中所有的构造器默认都会访问父类中空参数的构造器 2、在构造器的首行,没有显示的声明this(参数列表)或者super(参数列表),则默认调用父类的空参构造器:super() 3、当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语句指定调用本类或者父类中相应的构造器。同时,只能”二选一”,且必须放在构造器的首行
总结:通过子类的构造器创建子类对象时,一定会直接或间接的调用其父类及间接父类的构造器
多态
-
对象的多态性:父类的引用指向子类的对象
1、多态性的使用:虚拟方法调用 编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定 在编译期,只能调用父类中声明的方法,在运行期,实际执行的是子类重写父类的方法 总结:编译:看左边,运行:看右边 2、多态性使用的前提:①类的继承关系 ②方法的重写 ③父类的引用指向子类的对象 3、对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)
说明:有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的属性和方法不能调用
-
instanceof的使用
1、x instanceof A:检验x是否为类A的对象,如果是,返回true,如果不是,返回false 2、如果x instanceof A返回true,则x instanceof B也返回true(其中,类B是类A的父类)
如何调用子类特有的属性和方法?
1、向下转型:使用强制类型转换符
2、无继承关系的引用类型间的转换是非法的
3、在转型前可以使用instanceof操作符测试一个对象的类型
javaBean
符合以下标准的java类:
1、类是公共的
2、有一个无参的公共的构造器
3、有属性,且有对应的get、set方法