继承
1.只要子类的构造方法被调用,则父类的构造方法也会被调用
2.程序调用没有参数的构造方法,此构造方法会自动先调用父类中没有参数的构造方法,再执行自己的构造方法
3.调用父类构造方法super()的语句必须写在子类构造方法的第一行,否则编译时将出现错误信息。
4.在子类中访问父类的构造方法,其格式为super(参数列表)。super()可以重载,也就是说,super()会根据参数的个数与类型,执行父类相应的构造方法。
5.java程序在执行子类构造方法前,如果没有用super()来调用父类中特定的构造方法,则会先调用父类中“没有参数的构造方法”。如果父类中之定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则在编译时将发生错误。
6.super()与this()的区别:
super()是从子类的构造方法调用父类的构造函方法;this()则是给在同一个类中调用其他方法构造方法
super()与this()必须放在构造方法内的第一行,也就是由于这个原因,super()与this()不能同时放在同一个构造函数内
与this关键字一样,super指的也是对象,,所以super同样不能在static环境中用,包括静态方法和静态初始化(static语句块)
通过父类变量访问子类成员,只限于“覆盖”的情况发生时。
7.在默认情况下,所有的成员变量和成员方法都可以被覆盖,如果父类的成员不想被子类的成员所覆盖可以将他们声明为final。如果用final修饰成员变量方法,则该成员方法不能被子类所覆盖
8.父类中被声明为final的成员在子类中可被继承,但不能被覆盖
抽象类
1.抽象类就是不能用new运算符来创建实例对象的类,它可以作为父类被它的所有子类所共享。
2.抽象方法
它是以abstract关键字开投的方法,此方法只声明返回值的数据类型、方法名称与所需的参数,但没有方法体。
3.当一个方法为抽象方法时,意味着这个方法必须被子类的方法所覆盖,否则子类仍然是abstract的
4.抽象类中不一定包含抽象方法,但是抽象方法的类一定是抽象类
5.抽象类的构造方法不能声明为抽象的。由于不能用抽象类直接创建对象,因此在某些情况下在抽象类内定义构造方法是多余的。
接口
1.接口本身也具有数据成员与抽象方法
2.接口与抽象类的不同:
接口的数据成员都是静态的而且必须初始化
接口中的方法必须全部声明是abstract的,接口不能像抽象类一样拥有一般方法,必须且全部是抽象方法。
3.在定义接口时,需要注意两点:
接口里的“抽象方法”只需做声明,不用定义其处理数据的方法体(可以理解为空方法)
数据成员都是静态的且必须赋初值,也就是数据成员2必须是静态常量。
4.接口的继承与类的继承不同的是
一个接口可以有多个父接口,,他们之间用逗号分隔,形成父接口列表。
新接口将继承所有父接口中的变量与方法
如果子接口定义了与父接口同名的方法还有常量,则父接口的常量被隐藏,方法被覆盖
5.在定义内部类与外部类的时候,两者命名不能一样,否则编译器将无法区分内部类与外部类
6.匿名内部类名前不能有修饰符,也不能定义构造方法,因为它没有名字,也正是这个原因,在创建对象时也不能带参数,因为默认构造器方法不能带参数