1.为什么需要使用继承?
1.提高代码的重用性(减少重复的代码)
2.提高程序的扩展性
2.Java类继承类的语法格式
Java中类继承类的关键字:extends (implements是类继承接口的关键字)
格式:
public class 类名 extends 类名 {
}
注意:Java中类的继承是单继承(一个子类只能继承一个父类)。
继承是用来模拟现实生活中的什么关系呢?
包含关系:
例如:学生包含大学生、高中生、初中生、小学生、...
则可以定义大学生、高中生、初中生、小学生、...类让其继承学生类
因为大学生、高中生、初中生、小学生、...这些类都具有相同的属性和方法,例如名称、性别、年龄、...,也具有相同的方法,例如学习、休息
我们可以将这些属性和方法定义在学生类中,让其他的学生类继承学生类父类,可以大大提高编程效率。
3.子类继承父类后,子类能继承到父类的那些内容?
类中的访问修饰符有4种:private、默认的、protected、public
public:对所有类可见
protected:对同一包中的类可见、对同一包及不同包中的子类可见
default:对同一包中的类可见、对同一包中的子类可见
private:仅对类本身可见
继承和访问修饰符没有任何关系,即子类能继承到父类的所有的属性和所有的普通方法。
构造方法不能被子类继承,只能通过super关键字去调用。
3.1子类是否还可以定义父类中没有定义过的属性和方法呢?
当然是可以的呀。
4.方法重载和方法重写有什么区别?
方法重载的条件:
1.方法名完全一致;
2.方法所带的参数个数、顺序、类型至少要有一个不同。
3.可以是一个类中,也可以是由继承关系的类中。
方法重写的条件:
1.必须要存在继承关系;
2.子类在重写方法时,子类方法的访问修饰符可以大于或者等于父类方法中的访问修饰符;
3.子类在重写方法时,子类方法的返回值数据类型,方法名,参数都必须要和父类的完全一致。
即若考虑两个方法的关系是不是方法重写,首先需要看其所属的两个类是否具有继承关系,其次还要注意访问修饰符,参数个数、顺序、类型等。
判断是否是方法重写的关键字:@Override
有些方法不能进行重写:
1.private修饰符的方法不能进行重写;
2.默认的要看情况,如果子类和父类不在同一个包下,则不能重写(定义新方法);
3.final修饰的方法不能重写(会出错)。
4.1如何调用重写后的方法呢?
根据new关键字后的构造方法名来决定,如果构造方法名是子类的,则优先调用子类的方法,
如果子类没有此方法才会调用父类中的方法。
4.2根据上面规则,只会执行子类的方法,父类的方法就无法执行了,如果想要父类和子类的方法都能继承要如何处理?
使用super关键字来调用。
super关键字的应用和内存分析?
https://www.cnblogs.com/danbing/p/5034108.html
4.3什么情况下要使用方法重写呢?
子类和父类都有同一个行为(功能、用途),但是他们的具体实现又不同时,才会使用方法重写。
5.自动转型
条件:要使用自动转型必须要存在继承关系。
格式一:
父类名 对象名 = new 子类构造方法(参数值,...);
使用自动转型后会无法调用子类中特有的属性和方法,原因是因为Java的编译机制导致的;
Java在编译的时候,只会考虑对象名的类型,根据对象名的的类型去查找属性和方法是否存在,如果存在则编译通过,如果不存在则编译报错。
格式二:
访问修饰符 返回值数据类型 方法名(父类名 对象名){
对象名.方法名();//进行重写的方法
}
子类名 对象名A = new 子类构造方法(参数值,...);
方法名(对象名A);
父类名 对象名B = new 子类构造方法(参数值,...);
方法名(对象名B);