概念
继承:简单说是子类继承父类。子类拥有父类的属性。再通俗点,独生子在没有特殊遗嘱的情况下,拥有父类的财产,此时理解为子类拥有父类的所有非私有属性,但是无法继承父类的私有变量,好比不能继承父亲的细胞,不能继承父亲的胳膊。当然儿子可以不一样呀,父亲与儿子都会唱歌,父亲唱歌五音不全,但是儿子歌声优美,此时为需要子类重写父类的方法。
注意地方:
- 继承是不是只是指子类继承父类?
当然不是。子接口也能继承父接口。 - 子类不能继承私有属性。
- 子类可以重写父类方法。
举个例子:
父类:
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
子类
public class UserSon extends User {
private int iId;
public void test(int id){//父类不存在的方法
System.out.println(this.id);//私有,所以不能继承
this.setId(id);//public,所以继承到
}
public void setId(int id) {//重写父类方法
this.iId = id;
}
}
实现接口:实现接口,必须实现接口内的所有方法。
接口Car
public interface Car {
void produce();
}
实现接口:
public class BWM implements Car{
@Override
public void produce() {
System.out.println("produce BWM!!!");
}
}
注意
两个接口直接需要使用继承
public interface TestCarExtends extends Car{
}
继承抽象类
必须实现所有的抽象方法!!!
抽象类:
public abstract class AbstractClass {
public String toString(){//非抽象方法
return getClass().getName();
}
public abstract void toInteger();//抽象方法
}
继承抽象类
public class AbstractClassSon extends AbstractClass{
public static void main(String[] args) {
}
private void tt(){
}
@Override
public void toInteger() {
}
}
总结,从上面两个具体的例子,其实继承抽象类与实现接口的区别已经很明显了,继承抽象类需要实现所有抽象方法,接口同样。
区别:
- 一个是类,一个是接口。(最主要区别)
- java不支持多继承,但是可以实现多个接口。
- 接口需要实现所有方法,抽象类只需要实现抽象方法。
- 类可以运行,接口无法运行,因为没有方法体,更别说main方法了。
- 方法的修饰符上,抽象类可以在非抽象方法中所有权限,但是接口只有public
简单总结这么多吧,总结这些为后面对ArrayList的源码进行解析。
积土成山,风雨兴焉!!!