继承(extends)
1.概念
1)继承:体现的是一种类之间的 "is-a"关系。
A is a B (A和B具备继承关系)
A 继承 B
子类 继承 父类
子类 extends 父类
语法:class 子类 extends 父类{}
2) 继承是一种机制,通过继承子类可以直接使用父类的属性和方法。
3) 继承是类之间本身就存在的一种 "is-a"关系,不能强制(泛滥)的使用继承。
2.继承的好处
提高代码的可复用性、可扩展性。
class TestAnimal{
public static void main(String[] args){
Dog d = new Dog();
d.name = "小筒";
d.age = 2;
d.show();
d.eat();
d.sleep();
}
}
//父类 动物
class Animal{
String name;
int age;
public void eat(){
System.out.println("Animal...eat...");
}
public void sleep(){
System.out.println("Animal...sleep...");
}
public void show(){
System.out.println(name+"\t"+age);
}
}
//子类 狗
class Dog extends Animal{
}
3. 方法的覆盖(override) (也称为 方法重写)
(1) 方法覆盖:子类中定义和父类相同的方法。
(2) 方法覆盖的要求:
a. 子类的方法名、形参列表、返回值类型和父类相同
b. 子类的访问修饰符和父类相同或是比父类更宽
(3) 使用:通过子类型引用调用方法,如果调用的方法子类覆盖了父类中的方法,则优先使用子类覆盖的方法。
(4) 注意事项:
a. 如果子类定义了方法名、形参列表和父类相同;但是返回值和父类不同,不能构成方法的覆盖,编译报错。
b. 如果子类定义方法名相同、但是形参列表不同的方法,编译通过,运行也通过,此语法是方法的重载。
class TestDog{
public static void main(String[] args){
Dog d = new Dog();
d.shout();
d.eat();
}
}
//父类 动物
class Animal{
String name;
int age;
public void eat(){
System.out.println("Animal...eat...");
}
public void sleep(){
System.out.println("Animal...sleep...");
}
}
//子类 狗
class Dog extends Animal{
public void shout(){
System.out.println("Dog...汪汪...");
}
public void eat(){
System.out.println("Dog...eat..");
}
}
写出方法重载(overload)和方法覆盖(override)的区别?
overload:
a. 方法名相同
b. 形参列表不同(数据类型、个数、顺序)
c. 访问修饰、返回值类型、异常没关系
override:
a. 子类的方法名、形参列表、返回值类型和父类相同
b. 子类的访问修饰符和父类相同或是比父类更宽