一、重写与重载
重载:发生在同一个类中,同一个方法,只是传入的参数类型、个数以及顺序不同
class Father {
public Father() {}
public Father(int x) {}
public Father(double x, int y) {}
public Father(int y, double x) {}
public Father(String x) {}
}
重写:发生在继承当中,子类可以重写父类当中除构造方法以外的某个方法,但修饰符、返回值、方法名以及传入的参数都必须相同,其中(修饰符,方法名和传入的参数)叫作方法签名
重写以后的运行结果:
public class Work17 {
public static void main(String[] args) {
Father f = new Father();
f.dosth();
Son s = new Son();
s.dosth();
}
}
class Father {
public Father() {
}
public void dosth() {
System.out.println("父类的dosth()方法");
}
}
class Son extends Father{
public void dosth() {
System.out.println("子类的dosth()方法");
}
}
没有重写运行结果:
public class Work17 {
public static void main(String[] args) {
Father f = new Father();
f.dosth();
Son s = new Son();
s.dosth();
}
}
class Father {
public Father() {
}
public void dosth() {
System.out.println("父类的dosth()方法");
}
}
class Son extends Father{
}
二、interface接口与abstract抽象类
abstract抽象类:
1、使用abstract class定义抽象类
2、可以创建引用类型,只能创建子类的对象,如果要创建自己的对象时,也需要重写抽象方法(这时创建出来的时父类的匿名实现类),但这个抽象方法只能使用一次
3、可以普通类被继承,子类在继承时必须重写抽象方法,子类也只能继承一个父类
4、可以定义成员变量
5、可以定义抽象方法(抽象方法没有方法体),也可以定义普通方法,也可以有构造方法
6、可以使用任意访问修饰符
public class Work17 {
public static void main(String[] args) {
Father f = new Son();
f.dosth();
Father f1 = new Father() {
@Override
public void dosth() {
System.out.println("f1匿名实现类的dosth()方法");
}
};
f1.dosth();
Father f2 = new Father() {
@Override
public void dosth() {
System.out.println("f2匿名实现类的dosth()方法");
}
};
f2.dosth();
}
}
abstract class Father {
public int x;
private double y;
public Father() {
}
public abstract void dosth();
protected void dosth01() {
}
public void dosth02() {
}
}
class Son extends Father {
@Override
public void dosth() {
System.out.println("子类Son的dosth()方法");
}
}
intefface接口:用interface修饰的类没有关键字class
1、只能使用public访问修饰符
2、不能创建对象,没有构造方法
3、不可以有普通方法在jdk1.8以后可是使用default和static修饰符来创建普通方法
4、不能被普通的类继承,但可以被接口继承,也可以继承多个接口。普通类可以使用implements来实现,并且可以实现多个接口
5、不可以有成员变量,成员变量在定义时默认被publi static final修饰,所以必须在定义时赋值,也就是说只能定义常量
6、可以定义抽象方法也就是被abstract修饰方法(默认使用abstract修饰)所以可以不加abstract
interface Father {
int x = 3;
public void dosth();
public default void dosth01() {
}
public static void dosth02() {
}
}
interface GrandFather {
public void dosth();
}
interface Son extends Father,GrandFather{
}