抽象类
Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用abstract关键字来修饰
使用abstract关键字修饰的类为抽象类
包含抽象方法的类必须声明为抽象类但抽象类可以不包含任何抽象方法
抽象类是不可以被实例化的
package test;
public abstract class test1 {
public abstract void shout();
//Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方
//法必须使用abstract关键字来修饰
}
package test;
public class test2 extends test1 {
@Override
public void shout() {
System.out.println("呜呜呜");
}
public static void main(String[] args) {
test2 dog = new test2();
dog.shout();
}
}
接口
在定义接口时,需要使用interface关键字来声明,其语法格式如下:
如果一个抽象类中的所有方法都是抽象的,则可用另外一种方式来定义,即接口。接口是由常量和抽象方法组成的特殊类,是对抽象类的进一步抽象
接口中的变量默认使用“public static final”来修饰,即全局常量;接口中定义的方法默认使用“public abstract”来修饰,即抽象方法
使用接口的目的是为了克服单继承的限制
[<修饰符>] class <类名> [extends <超类名>] [implements <接口1>,<接口2>,…]
package test;
public interface test3 {
//在定义接口时,需要使用interface关键字来声明
//修饰符 默认 public static final来修饰,即全局常量
String animal_behavior = "动物行为";
//默认修饰符 public abstract来修饰,即抽象方法
void breath();
}
package test;
public class test4 implements test3, test5 {
@Override
public void breath() {
System.out.println(animal_behavior + ":" + "呼吸");
}
@Override
public void run() {
System.out.println(animal_behavior + ":" + "跑");
}
public static void main(String[] args) {
test4 ts = new test4();
ts.breath();
ts.run();
}
}
package test;
public interface test5 {
void run();
}
接口可以用于多继承
接口具有默认修饰符
继承相关关键字不一样:接口继承接口、类继承类extends
类继承接口implements
package test;
public interface test6 extends test9 {
void shout();
//接口和抽象类都不能实例化,都可以有抽象方法
}
package test;
public class test7 implements test6 {
public void run() {
System.out.println("can run");
}
public void shout() {
System.out.println("can say");
}
public static void main(String[] args) {
test7 ts = new test7();
ts.shout();
ts.run();
}
}
package test;
public class test8 extends test7 {
public void shout() {
System.out.println("just can");
}
public static void main(String[] args) {
test8 ts = new test8();
ts.shout();
}
}
package test;
public interface test9 {
void run();
}