1 继承
在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称为子类,现有类称作父类,子类会自动拥有父类的所有可继承的属性和方法。
1)格式
class 子类名 extends 父类名 { }
2)继承的好处和注意事项
好处:
- 提高了代码的复用性,提高软件开发效率
- 使类与类产生了关系,提供了多态的前提
注意:
- Java中,类只支持单继承,一个类只能有一个直接父类
- 多个类可以继承一个父类
- 可以有多层继承,例如c类继承b类,b类又可以继承a类,此时,c类也可以作为a类的子类。
- 子类和父类是一个相对的概念,一个类是某个类的父类的同时,也可以是另一个类的子类。
3)子父类中成员变量的特点
- 若子类父类中出现不同名的成员变量,则子类可以顺利访问父类的成员变量。当子类父类中的成员变量名字相同时,在子类中想要方位父类的同名成员变量,则要使用关键字super(super.父类中成员变量)。
- 父类中的成员变量是非私有的,子类中可以直接访问。若父类中的成员变量是私有的,则子类不能直接访问。
4)子父类中成员方法特点
- 当在程序中通过对象调用方法时,会现在子类中寻找相应的方法,若子类中没有,则会去父类中寻找并执行。
- 当子类中出现与父类中一样的方法时,会出现覆盖操作,称为override(重写)。
- 在子类中访问父类的成员方法时,要加上关键字super(super.父类的成员方法)。
class Phone{
public void sendMessage(){
System.out.println("发短信");
}
public void call(){
System.out.println("打电话");
}
public void showNum(){
System.out.println("显示来电号码");
}
}
// 智能手机类
class NewPhone extends Phone{
public void showNum(){
// 调用父类已经存在的功能
super.showNum();
// 添加自己特有的新功能
System.out.println("显示来电姓名");
System.out.println("显示头像");
}
}
方法重写注意事项:
- 子类方法覆盖父类方法时,必须要保证权限大于等于父类权限。(指修饰符)
- 方法的返回值类型、方法名、参数列表要一样。
2 抽象类
1)产生背景
当编写一个类时,往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,这些方法都有具体的方法体。
但是,有时候某个父类只是知道子类应该包含怎样的方法,但是无法准确知道子类如何实现这些方法。比如一个图形类有求周长的方法,但是不同的图形求周长的算法不一样。
抽象方法:方法功能声明相同,但方法功能主体不同,则抽取出方法声明,不抽取方法主体。
抽象类:被关键字abstract修饰
2)定义格式
// 抽象方法定义格式
public abstract 返回值类型 方法名(参数);
// 抽象类定义格式
abstract class 类名{}
示例:
// 抽象类
abstract class Developer{
// 定义抽象方法
public abstract void work();
}
class JavaEE extends Developer{
public void work(){
System.out.println("我是JavaEE工程师");
}
}
class Android extends Developer{
public void work(){
System.out.println("我是Android工程师");
}
}
3)抽象类的特点:
- 抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。
- 抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
- 只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
- 抽象类一定是个父类。
- 抽象类可以不定义抽象方法。
- 抽象关键字abstract不可以和关键字private、final、static共存。私用方法子类无法继承,也不能覆盖。