1:重写和重载的对比
- 重载:Java允许用同一个名字去定义多个方法,只要方法的参数列表不同,即参数的数量,类型不完全相同。方法调用时根据实参列表的个数和类型自动调用匹配方法。
- 重写:在类的继承过程中,如果子类中新增的变量和方法与父类中原有的数据和方法同名,则会重写从父类继承来的同名变量和方法。重写和重载类似,但更严格:不仅要求同名。还要求参数列表也相同。
2:super关键字的使用
如果想在子类中访问父类中被覆盖的成员,可以使用关键字super来解决这一问题,其基本格式如下:
访问父类成员:super.成员变量 或 super.成员方法(参数列表)
访问父类构造方法:super(参数列表)。
生成一个子类的实例是,首先要执行子类的构造方法,但如果该子类继承自某个父类,则执行子类的构造方法前,系统将先自动调用父类的无参构造函数。对于父类含参数的构造方法,子类可以通过在自己的构造方法中使用super关键字来调用它,这个调用语句必须是子类构造方法中第一条可执行语句。
public class Hello {
public static void main(String args[]) {
Manager m=new Manager();//用先父类中的构造函数进行初始化
System.out.println(m.getDetails());
System.out.println("department:"+m.department);
}
}
class Empoyee{
private String name;
private int salary;
public String getDetails() {
return "Name:"+name+"\nSalary:"+salary;
}
Empoyee(){
name="Tom";
salary=1234;
}
}
class Manager extends Empoyee {
public String department;
public String getDetails() {
System.out.println("I am in manager");
return super.getDetails();
}
Manager()
{
super();//调用父类的构造函数,且必须是子类构造函数方法中第一句
department="sale";
}
}
与super不一样,关键字this的主要作用在于表示对当前对象的引用。
3:抽象类
关键字abstract修饰的类称为抽象类,抽象类是一种完全没有实现的类。不能用它实例化任何对象,主要用来描述一些概念性的内容,然后在子类中具体去实现这些概念。抽象类可以理解为是普通类中加入了抽象方法的类,抽象方法只能被public和protect修饰,抽象类不可以被final修饰,因为final修饰的类不可以被重写。而抽象类的抽象方法在子类中需被重写。
(看到了一个关于抽象类写的还不错的一篇文章 地址贴在下面https://blog.csdn.net/wei_zhi/article/details/52736350/)
4:接口
接口是抽象类的一种变体,接口是用关键字interface来定义的。接口中所有方法都是抽象的。
接口实现是通过关键字implements来实现的。如下:
class 类名 implements 接口名{
……//类体
}
其中,被实现的接口可以有很多个,之间用逗号分隔。这一点,类继承是无法做到的。另外,**接口也可以继承接口。**但是最后这些接口总是会被一个类实现,在实现的类里,必须重写这些方法。
5:抽象类和接口的区别:
(1)抽象类中的方法不一定都是抽象的,而接口中的所有方法都是抽象的。
(2)接口中的所有数据都是公有静态常量,即具有public,static,final属性,但一般不写这些修饰符。
(3)因为接口中所有方法都是抽象的,public的。因此必须在实现该接口的子类中重写所有这些方法。
在使用两者时候:
(1):如果想拥有自己的方法,可以选用抽象类;抽象类中可以有普通方法来实现自己的一些操作。
(2):如果实现多重继承,可以选用接口,类不可以多重继承。
(3):如果操作一直更改,使用类。使用接口的话,需要在实现了接口的所有类中逐一更改。