一:继承:
类的继承:被继承的类叫做父类或者超类;
继承的叫做子类!
一个父类可以拥有多个子类,但一个类只能有一个直接父类。
继承的实现是利用extends关键字来实现的。子类可以从父类那里继承所有非私有成员来作为自己的成员。格式:class 子类名 extends 父类名{
}
在java语言的继承中,执行子类的构造方法之前,会先调用父类中没有参数的构造方法,其目的是为了要帮助继承自父类的成员做初始化操作!
如果父类中有许多个构造方法时,若要调用父类中某个特定的构造方法,需在子类的构造方法中通过super()语句调用父类特定的构造方法。
super()语句必须写在子类构造方法的第一行;super()可以重载,也就是说,super()会根据参数的个数与类型,执行父类相应的构造方法;如果父类中只定义了有参数的构造方法,而在子类的构造方法中有没有用super()来调用父类中特定的构造方法,则编译时将发生错误!解决的方法是在父类中加上一个“不做事”且没有参数的构造方法即可。
super()与this()的区别:
1,super()是从子类的构造方法调用父类的构造方法;而this()是在同一个类内调用其他的构造方法。
2,这两者都必须写在构造方法内的第一行,也就是这一个原因,他俩无法共存!
3,与this一样,super指的也是对象,所以super同样不能再static环境中使用,包括静态方法和静态初始器!
二:覆盖
覆盖是在子类中定义名称,参数个数与类型均与父类中完全相同的方法,用以重写父类中同名方法地功能。声明时,应与父类被覆盖的方法有完全相同的方法名,返回值类型和参数列表。如果子类的方法头和父类的方法头相同,则父类的该方法不能被继承!
子类中不能覆盖父类中声明为final或static的方法。
父类的方法被覆盖后,之后调用时则不调用父类的方法啦,而是调用子类的方法!
以父类的对象调用子类成员(只能发生在覆盖中)
格式:父类名 对象名=new 子类名(........);
对象名.被覆盖的方法名();
如果一个方法仅存在于子类中,那么当以父类对象调用这个方法时,会发生错误!
所有已被private修饰符限定为私有的方法以及所有包含在final类中的方法,都会被默认为final
toString()方法:
是将调用该方法的对象的内容转换成字符串,并返回其内容,但返回的是一些没有意义且看不懂的字符串。因此,如果要用toString()方法返回对象的内容,可以重新定义该方法以覆盖父类中的同名方法以满足需要!
三,抽象类:
java中可以创建专门的类作为父类,这种类被称为抽象类!抽象类的作用有点像模板的作用,目的是根据它的格式来创建和修改新的类。但是并不能直接由抽象类创建对象,只能通过抽象类派生出新的子类,然后再由子类来创建其对象!也就是说,抽象类不能用new关键字来创建实例对象的类!
抽象类以abstract来修饰
抽象类中的方法分为两种:一种是带有方法体的普通方法,一种是没有方法体的“抽象方法”,它是以abstract关键字开头的方法,此方法只声明返回值的数据类型,方法名称与所需的参数,但没有方法体。抽象方法用“;”结尾。抽象方法必须被子类的方法覆盖,否则子类仍然是抽象的。抽象方法声明修饰符static与abstract不能同时使用!
抽象类的子类必须实现父类中的所有抽象方法,或者将自己也声明成抽象的。
抽象类是被继承的,所有不能用final修饰,即abstract与final不能同时使用
抽象类中不一定包含抽象方法,但包含抽象方法的一定是个抽象类!
四,接口:
1,接口的数据成员都是静态的且必须初始化,即数据成员必须是静态变量。
2,接口中除了声名抽象方法外,还可以定义静态方法和默认方法
3,接口的实现:
接口创建类的过程称为接口的实现:
格式:class 类名称 implements 接口名表{
}
五,枚举:
当一个变量有几种固定取值时,将其声明为枚举类型
枚举是一种特殊的类,也叫枚举类,利用enum实现!
格式:[修饰符]enum 枚举类型名{
枚举成员
方法
}
修饰符可以是public,private,internal
枚举类型名有两层含义:1,作为枚举名使用 2,表示枚举成员的数据类型