继承extend:
子类继承父类用extend,在重写父类方法时,不能降低方法的访问权限
子类不能将父类的static方法写成实例方法,也不能将实例方法写成static方法
当子类重写父类的成员变量和方法时,我们可以用super来访问父类被隐藏的变量和方法,也可以用super来调用父类的构造方法
final关键字,final类不能被继承,final方法不能被重写,final变量不能修改,即常量
抽象abstract:
抽象类,抽象方法只能声明,不能实现,抽象类可以有抽象方法,也可以有非抽象方法,抽象类不能直接new来创建对象
抽象类的继承:如果有非抽象类来继承抽象类,那么子类必须重写所有的抽象方法,如果是抽象类继承抽象类,那么子类可以继承抽象类的抽象方法
package com.imooc;abstract class Animal { abstract void eat(); void printname() { System.out.println("dog"); }}
package com.imooc;public class Dog extends Animal { @Override void eat() { // TODO Auto-generated method stub System.out.println("dog eat meat"); } }
接口interface:
接口里只有常量,没有变量,只有抽象方法,没有普通方法,常量都是static,常量和方法权限一定是public;
如果一个类实现了一个接口,那么子类必须重写所有方法(因为全部都是抽象方法,而且访问权限都应该是public)
package com.imooc;interface Animal{ final int age=10; public abstract void eat();}
package com.imooc;public class Dog implements Animal { @Override public void eat() { // TODO Auto-generated method stub System.out.printf("dog eat meat,dog age is %d\n",age); } }
抽象和接口都是为了让编写者更容易维护,不必拘泥于细节,只需要关心具体操作