java实现多继承
1,多层继承
就是多个单继承积累,最下层在子类能具有上层内在特征,但这种方法重复高,一般不去用
2、内部类
一个类要继承多个类,在这个类的内部写多个内部类,然后让这些内部类都继承不同的类。
class dota {
private String str = "let's play some dota";
public void play() {
System.out.println(str);
System.out.println("好呀好呀");
}
}
class lol {
private String str2 = "let's play some lol";
public void play() {
System.out.println(str2);
System.out.println("不约");
}
}
class player {//实现多继承
class dotar extends dota {//内部类继承一个
public void play() {
super.play();
}
}
class loler extends lol {//内部类继承一个
public void play() {
super.play();
}
}
public void play() {
dotar d = new dotar();
d.play();
loler l = new loler();
l.play();
}
}
public class MultiExtendTest1 {
public static void main(String[] args) {
player p = new player();
p.play();
}
}
3、通过接口
interface Dota{
void play();
}
interface Lol{
void play();
}
interface test extends Dota,Lol{
void sayhi();
}
class Player implements test,Dota,Lol{
public void play(){
System.out.println("let's play some dota");
}
public void sayhi(){
System.out.println("hi");
}
}
public class MultiExtendTest2{
public static void main(String[] args) {
Player p=new Player();
p.play();
p.sayhi();
}
}
接口的特性
和抽象类一样,接口不能实例化,接口是特殊的抽象类
如果一个类继承了接口,必须重写实现接口中的所有方法
接口没有构造函数,抽象类可以有
接口的属性都是默认static final,在定义时指定初始值,接口中只有常量,接口的方法自动用public abstract修饰,只有全局抽象方法
接口只有方法的声明,没有方法体
抽象类可以在不提供接口方法实现的情况下实现接口
抽象类和接口的区别
1、接口没有方法体只有方法的声明,并且默认是public static,但在java8以后接口有了默认方法(用default修饰),抽象类可以有构造方法,静态方法,普通方法。
接口可以有抽象方法,默认方法,静态方法
抽象类可以有普通方法,抽象方法,静态方法,构造方法
2、public static final 修饰,接口中的属性都是默认被public static final修饰的,而抽象类的成员变量可以有不同类型的
3、接口不能有初始化块,抽象方法有初始化块
4、一个类只能继承一个抽象类,能实现多个接口
5、抽象类是可以被实例化的,但不是通过new,而是通过子类实例化前要实例化他的父类。接口是不能被实例化的,它都没有构造方法
什么时间使用接口什么时间使用抽象类
1、当你有默认方法的实现,就使用抽象类
2、当你的基本功能要不断的改变就使用抽象类,如果使用接口,那么基本功能经常改变,就需要修改实现接口的全部类
扩展 非静态代码块在执行构造方法之前执行一次
int和Integer
int是基本数据类型,Integer是int的包装类
Integer需要实例化后才能用,int不需要
Integer的默认值是null, int的默认值是0