封装:属性私有化,方法私有或公开。属性私有,通过get/set方法做成通用组件,叫javabean。

继承:实际上是对父类的扩展,子类通过extends实现对父类的继承。

多态:多态建立在继承的基础上。父类new子类对象,父类 f = new 子类();  此时 f 调用方法是调用子类的,此时是动态绑定,具体访问那个是在运行期间去判断变量指向的对象的类型(编译看左边,运行看右边)。注意:静态方法没有运行时的多态。访问属性时,是父类的,此时没有进行动态绑定(静态绑定),编译期间变量就绑定了值。


继承相关:

1. 子类能自动继承父类成员变量和成员方法,私有成员变量和成员方法除外。

2. 属性的隐藏,只要子类中成员变量与父类的同名(无论访问权限、常量修饰符、数据类型、静态修饰符是否相同),就可以将父类的变量隐藏起来。一般情况使用的是子类的同名变量。

3. 方法的覆盖(重写):方法名必须相同;返回值数据类型必须完全相同;方法的参数必须完全相同,包括参数的个数、类型和顺序。

    此外,子类方法的访问权限不能严于父类的方法;父类静态方法不能被子类实例方法覆盖,父类实例方法也不允许被子类静态方法覆盖;父类final方法不允许被覆盖,但是父类非最终方法可以在子类中使用final修饰符。

4. 构造方法的继承:子类会自动继承父类的无参构造方法,其实是一种自动调用。子类无论哪个构造方法执行时,都会先执行父类中无参的构造方法。父类带参的构造方法不会被子类继承也不会自动调用。

5. super的使用:super只能在子类中使用,用来调用父类的成员或构造方法。

   访问父类成员变量:super.变量名

   访问父类成员方法: super.方法名([参数列表]) 

   访问父类构造方法:super([参数列表]),此语句只能在子类的构造方法中使用,且只能是第一条执行语句,一个构造方法中只能有一条super语句。

   一旦显示使用super来调用父类的构造方法,系统将不会再自动调用父类中无参的构造方法。实际上,程序员如果没有在子类的构造方法中写入super()或this()语句,系统都会自动在第一行家一条super语句,实现对父类构造方法的调用。.

6. 继承的内部处理:对于父类中的成员,被子类继承后,并非复制一份放到子类的空间中,它仍然只在父类空间中存在一份。如果程序通过“子类对象名.成员名”的方式使用成员,编译器首先到子类中查找,如果没有,到其父类空间中查找,以此往上推,如果找到Object类,还未发现此成员,则编译器报错。


抽象类与抽象方法:

抽象类和抽象方法的声明都只需在其头部加上关键字abstract。

抽象方法必须在抽象类中,抽象类可以没有抽象方法。

声明抽象方法的限制:构造方法不能声明为abstract;静态方法不能声明为abstract;private方法不能声明为abstract;final方法不能声明为abstract;抽象方法只能出现在抽象类或接口中。

抽象类不能和private、static和final一起。因为抽象类必须被继承且不能被实例化。


最终类和最终方法

最终类通常是某个固定作用的类,比如java提供的System、String和Socket等。最终类中的方法都是最终方法。

最终方法可以出现在任何类中,但不能被覆盖,只能被重载。


接口与多重继承

接口用关键字interface来定义,接口是java用来实现多重继承的一种结构(一个类可以实现多个接口),它无论从组织形式还是使用角度来看,都可以看成是一种特殊的抽象类。

当抽象类中全是抽象方法的时候,它就成了接口。接口中的成员全都是public的;接口中能定义的,要么是静态常量(默认情况下,接口的成员变量具有public  static  final锁联合规定的属性),要么是抽象方法;节后中没有构造方法,但是抽象类有构造方法。

由于接口中的成员属性都是静态常量,所以可以用“接口名.变量名”的形式直接使用。

接口可以继承多个接口,如 interface  子接口  extends 父接口1, 父接口2{}

一个类可以实现多个接口,如[类修饰符]  class [extends  父类名]   [implements 接口名1, 接口名2,...]