04747-Java(六)——继承与多态
- Java仅支持单重继承。
- 如果一个类有父类,那么父类只能有一个,这条限制称为单重继承
- 子类不能继承父类的构造方法。
- 允许用已定义的类来定义一个新类,新类称作子类。
- 在Java中如何判断两个对象各个属性(成员变量)的值是否相同?
在Java中要判断两个对象的属性(成员变量)的值是否相同,需要在类声明中对equals方法进行覆盖,即重新修改这个方法,重写的equals方法中对对象中的值是否相等一一判断。 - 请说明父类与子类的联系与区别:
大的更一般的类可以看作父类,包含在其中的特殊的、具体的类是子类。
子类与父类的关系是:子类对象“is a”父类对象。从层次关系上讲,子类继承自父类,父类的对象引用可以指向子类对象,反之则不行。从成员上讲,子类可以比父类拥有更多的成员变量和成员方法,这些成员变量和成员方法是子类独有的,父类不具有也不能使用。但是反过来,父类中具有公共、保护权限的成员变量和成员方法同时也属于子类,子类可以使用。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17//父类对象引用指向子类对象
class Animal {
void eat() {
System.out.println("Animal is eating");
}
}
class Dog extends Animal {
void eat() {
System.out.println("Dog is eating");
}
}
public static void main(String[] args) {
Animal a = new Dog(); // 父类引用指向子类对象
a.eat(); // 输出:Dog is eating
} - 判断父类变量指向的是不是子类实例:
1
2
3if(a instanceof Dog){//判断父类变量指向的是不是子类实例
Dog d=(Dog) a;//将父类变量转换成对应的子类对象
} - Java允许将一个子类的对象赋给父类的变量(子类对象可以作为父类对象使用),这称为对象转型(向上转型)。
- 什么是继承:
将一个已有类中的数据和方法保留,并加上自己特殊的数据和方法,从而构成一个新类。 - 简述通过继承,子类可以获得的好处:【难背】
(1)子类可以拥有父类的所有属性和方法(2分);
(2)也可以扩展原有代码、生成新的类、原有代码可以不必重写(1分)。 - 类A某个成员变量的类型是类B,则类Ahas a类B。
- 方法覆盖:要求子类定义方法所用的名字、返回类型及参数列表和父类中的方法使用的完全一样,也就是具有相同的方法签名,从逻辑上看就是子类方法中的成员方法将隐藏父类中的同名方法。
名词解释:使用类的继承关系,可以从已有的类产生新的类。在原有特性的基础上,增加了新的特性。父类中原有的方法可能不能满足新的要求,因此需要修改父类中已有的方法。 - 重载的方法属于同一个类,覆盖的方法分属于父类、子类。
- 简述关键字super的作用:【难背】
如果子类重写了父类中的方法,但在子类中还想使用父类中被隐藏的方法,可以使用super关键字,另外,在子类的构造方法中也可以使用super关键字,其功能为调用父类的构造方法。
使用super关键字时要注意两个问题:
首先,使用super.method()调用父类中的方法method(),将执行父类方法中的所有操作,其中可能会包括一些原本不希望进行的操作,所以调用时要谨慎。
其次,由继承性的机制可以知道,super.method()语句所调用的方法不一定是在父类中加以描述的,它也可能是父类从它的祖先中继承来的。因此,有可能需要按继承层次关系依次向上查询才能找到。 - 方法覆盖的两条原则:【难背】
(1)覆盖方法的允许范围不能小于原方法。
(2)覆盖方法所抛出的异常不能比原方法多。 - 如果一个抽象类除了抽象方法外什么都没有,则使用接口更合适。
- 抽象类可以包含抽象方法和非抽象方法。
- 用关键字final修饰的类是终极类,不能有子类。
- 接口及其实现的基础语法:
1
2
3
4
5
6
7public interface A{
public void method(){...}
}
class B implements A{
public String s;
} - 什么是抽象类、抽象方法?在使用过程中有什么注意事项?【难背】
定义时只定义了方法但没有定义具体实现的类称为抽象类,在Java中通过关键字abstract把一个类定义为抽象类。
每一个未被定义具体实现的方法也用关键字abstract修饰,这样的方法称为抽象方法,只有抽象类才有抽象方法。
在使用抽象类和抽象方法时要注意的事项有:不能用抽象类作为模板创建对象,必须定义抽象类的子类后,用子类作为模板才能创建实例。对于抽象方法不能进行调用,子类将抽象方法实现以后才可以调用。 - 接口中所有的方法都是抽象方法,没有方法体。
- 一个类可以实现多个接口,从而实现了多重继承。
1
2
3class 类名 implements 接口1, 接口2, ..., 接口N {
// 实现接口中的方法
} - 接口可以定义自己的成员变量和方法,但成员变量必须赋初值且不可改变(系统会自动添加final和static关键字)。
- 实现接口必须实现该接口的所有方法。
- 接口可以继承。
- 简述抽象类与接口的联系与区别:【难背】
抽象类是指类中定义了方法但没有具体实现的类,抽象类代表一些基本行为,但又无法或不宜在这个类中对这些行为加以具体实现,而希望在子类中根据实际情况去实现。
接口是体现抽象类功能的另一种方式,可将其想象为一个“纯”的抽象类,接口中所有的方法都是抽象方法,都没有方法体,接口与抽象类都用来定义多个类的共同属性。
接口还可以实现与抽象类不同的功能,具体来说,Java不支持多重继承,一个类只能从唯一的一个类继承,但允许一个类实现多个接口,从而实现了多重继承的功能,并具有更加清晰的结构。 - 一个接口能够包含的元素有成员变量,默认修饰符是abstract;成员方法,默认修饰符是static,final。
- 子类中修改父类中已有的同名方法,称为方法覆盖/重写。
- 同一个类中,具有不同签名的同名方法是重载方法。
- 接口中的抽象方法不能是私有或受保护的方法。
- Java中实现多重继承的机制是使用接口。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 珍珠巧克力!
评论
GitalkValine