继承
为什么要有继承或者说继承的好处?
当我们要为某一业务新增新的功能或者特性时,既不能删除原有的功能,也要增加新的业务,按照正常的思维逻辑需要重写代码,这样既增加了代码的工作量负担,又给业务带来了不安全性。如果我们可以用继承来保留原先的功能前提下,来增加新的业务功能,这样就可以解决先前所面对的问题。
注意事项
1.方法覆盖:存在于继承关系中的一种语法。
(1)只存在于子类,当子类方法和父类方法及其声明方式相同时相同时,子类方法覆盖父类方法。
(2)方法的访问修饰符只能是父类的大于等于子类(子类是public父类必须是public)
2.super关键字:是在子类使用的关键字,是父类的引用,用来调用父类的方法或者变量。super关键字也能避免父类的方法被覆盖。
3.java只能单继承:也就是说一个子类只能有一个父类,一个父类可以有多个子类。
4.final关键字:final修饰的类不能有子类,也就是说被final修饰的类不能被继承。
5.只要给子类创建对象时,那么子类构造器会调用父类构造器。
public class Dog {
public String name;
public Dog(){
System.out.println("这是父类构造器");
name="阿黄";
}
public void eat(){
System.out.println("狗在吃饭");
}
public void sleep(){
System.out.println("狗在睡觉");
}
protected void run(){
System.out.println("狗在奔跑");
}
}
public class NewDog extends Dog{
public String color;
public NewDog(){
System.out.println("这是子类构造器");
color="黄色";
}
protected void run(){
super.eat();//super关键字
System.out.println("狗在狂奔");
}
}
public class Test {
public static void main(String[] args) {
NewDog dog=new NewDog();
dog.eat();
dog.sleep();
dog.run();//方法覆盖
System.out.println(dog.color);
System.out.println(dog.name);
}
}
这是父类构造器
这是子类构造器
狗在吃饭
狗在睡觉
狗在吃饭
狗在狂奔
黄色
阿黄