继承
为什么:在类与对象中,我们抽象的了解到类与对象相比于现实中的概念,而在此,我们可以理解为,类的更进一步的划分,比如学生还可分为,小学生,大学生;汽车可分为,中国造和外国造。此时小学生,大学生和中国汽车外国汽车分别为学生和汽车的子类,反过来说,学生和汽车就是父类。但是在子类中,要把父类声明的属性和定义的方法的代码再写一遍,这就很繁琐,所以,这时候就出现了继承。
是什么:当一个子类继承(extends)了他的父类,他同时也继承了父类的属性和方法。这样,就能完成代码的重用。
重写
为什么:当父类中存在一个方法,子类可以直接调用,但是当这个方法对于子类的需求不够准确时,子类需要一个同名但更准确的方法,这时候,就出现了重写。
是什么:重写即对原来已有的进行再写,这时候子类可以调用重写的方法,但这并不影响其他类调用父类原有的方法。
重写时需要注意:
①当父类方法有final修饰时,该方法无法被继承和重写。
②在java中,当子类重写了一个父类方法时,在子类重写代码前,要加@Override注解。
③父类中的方法如果需要传入参数,那么子类重写后的方法参数个数及类型必须和父类相同。
④父类方法中如果有返回值,那么:若返回值为基本数据类型中的一种,则子类重写后的方法,返回值类型必须与父类相同或者比父类范围大;若返回值的类型为类,则子类返回值类型必须与父类返回值类型的类相同,或者为父类返回值类型的类的子类。
⑤重写后的方法访问权限必须比原来权限大或者相等(不能缩小访问权限)。
public class father {
public String name;
public int age;
public int phone;
public Object read(String a) {
System.out.println("正在看书");
return "父类返回值";
}
}
public class son extends father{
@Override
public String read(String b) {
System.out.println("子类正在看书");
return b;
}
public static void main(String[] args) {
new son().read("子类返回值");
new father().read("abc");
System.out.println(new son().read("子类返回值"));
System.out.println(new father().read("abc"));
}
}
/*运行结果:
子类正在看书
正在看书
子类正在看书
子类返回值
正在看书
父类返回值*/