java中采用关键字extends继承一个类。
为什么要有继承:
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
继承的作用:
- 继承的出现提高了代码的复用性。
- 继承的出现让类与类之间产生了关系,提供了多态的前提。
- 不要仅为了获取其他类中某个功能而去继承
子类除了通过继承获取父类的结构之外,还可以定义自己特有的成分,子类是对父类功能的扩展,子类不是父类的子集。
方法的重写(对父类同名方法的重写)。方法的形式(1、修饰符 2、返回值类型 3、方法名(4、参数列表){ }):
前提:子类继承父类,父类的方法对子类不适用,子类可以对父类方法重写(覆盖)。
重写的规则:
- 要求子类方法形式中2、3、4部分与父类一样。
- 子类的方法修饰符不能小于父类方法的修饰符。
- 若父类方法抛异常,则子类抛的异常类型不能大于父类。
- 子类和父类方法必须同为static或同为非static。
子类可以覆盖(override)父类中的方法(private因为invisible不能覆盖,final也不能覆盖)。假如父类中有方法private void eat(){},子类中方法public void eat(){},子类中的这个方法并不是对父类方法的重写。
java中四种访问权限修饰符:
不要为了继承而去继承,要有一些天然的关系(比如person类中有个eat方法,animal中也需要eat方法,但是不要去让animal类去继承person类)。
java中类的继承只支持单继承,一个类只能继承一个父类,但是一个父类可以有多个子类。
public class Person {
public String name;
public int age;
public String getInfo() {
return "Name: "+ name + "\n" +"age: "+ age;
}
}
public class Student extends Person {
public String school;
public String getInfo() { //重写方法
return "Name: "+ name + "\nage: "+ age
+ "\nschool: "+ school;
}
public static void main(String args[]){
Student s1=new Student();
s1.name="Bob";
s1.age=20;
s1.school="school2";
System.out.println(s1.getInfo()); //Name:Bob age:20 school:school
Person p1=new Person();
p1.getInfo(); //调用Person类的getInfo()方法
Student s1=new Student();
s1.getInfo(); //调用Student类的getInfo()方法
}
参考资料:
http://blog.csdn.net/meiyijian/article/details/51973327
java继承覆盖总结:http://blog.csdn.net/stonecao/article/details/6317353?locationNum=7