继承
一、继承概述
1、什么是继承
1.1、继承是面向对象三大特性之一(其他两个分别是:封装,多态),原有类派生出新的类,新的类获得原有类中所有非私有的的属性和方法。
1.2、继承的关键字是:extends
1.3、继承的基本语法:
//Son继承了Father
public class Son extends Father{
}
2、继承的目地:
1.1、继承是派生类对原有类中的特性能够复用的同时,还能新增出更多的特性。
举例人和猫都是动物,但是他什么除了有共同的行为(吃,睡)还有不同的行为(人要工作,猫要抓老鼠)这时候就可以将人和猫共有的特性抽出来,定一个动物类,然后再分别定义猫和人两个子类继承动物类。这个时候猫和人都有父类中公共的特性的同时还可以增加自己特有的属性和行为。
二、继承相关注意点
1、并不是父类中所有的特性都能继承过来
如果父类中的属性或行为是私有(private)的将无法继承。
/**
* 父类
*/
public class Father {
//name属性是私有的
private String name;
//age属性是public的
public Integer age;
/**
* 此时set,get方法都是public的
*/
public String getName() {
return name;
}
private void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
//继承了Father类
Son son=new Son();
//直接调用父类中的私有属性将报错
son.name="";
//可以直接调用父类中的公共属性
son.age=1;
//可以直接调用父类中的公共方法
son.getName();
//直接调用父类中的私有方法将报错
son.setName("cch");
}
由此可知权限修饰符可以决定相关属性和行为是可继承
2、当子父中特性相同如何区别
1、当在子类中想要使用父类的特性时需要使用super关键字,如果想用自己的特性时使用this或省略关键字使用
public void test(){
//使用自己类中的属性this关键字,
this.age=1;
//也可以直接调用
age=2;
//使用父类中的属性使用super关键字
super.age=1;
//使用父类中的方法也使用super关键字
super.getName();
}
3、java中只提供了单继承,没有多继承,但是可以多实现
4、子类可以重写父类中的非私有方法(重写),重写后建议加上@Override注解
5、子类不会继承父类中的构造器但是可以在本类的构造器中调用父类的构造器
6、当对象被创建时,程序都会依次从object开始调用该对象的所有父类无构。
7、当父类没有无参构造器时,子类必须在构造器中将参数传递给父类中的某个有参构造器否则报错
继承相关面试题
1.重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
重写:重写是子类对父类中某个方法的覆盖,对被重写的方法重新修改。
重写的注意点:
1.重写的方法必须与被重写的方法方法名,参数个数,参数类型,返回值类型一样,
2.并且权限修饰不得小于被重写方法,(原因:如果子类的权限比父类小那么父类的修饰将无意义。会导致父类的方法可以不能直接运行。(本未倒置))
3.重写后不能抛出新的被重写方法中没有的异常
4.私有方法不能被重写
5.静态方法不能被重写
重载:重载是同一个类中有n个方法,方法名都相同但是,参数个数或参数类型或参数顺序都不同。重载与返回值和修饰符无关