最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。
本篇讲抽象类(abstract)和接口(interface)的主要内容。
首先来说一说抽象方法,抽象方法是一种只有声明但是没有方法体的方法,其意义为将方法的设计与实现分离。而抽象类之所以叫做抽象类就是因为有了抽象方法:
接下来看一看相关代码,关于一些细节方面的提醒均在代码中体现:
public abstract class Animal {
String ss;//抽象类里面可以有正常的属性
public abstract void run(); //定义抽象方法的格式
public void breath(){ //抽象类里面可以有正常的方法
System.out.println();
run(); //多态,如果调用指定是子类new出来的对象来调用的(抽象类不能new一个对象),所以这里调用的是子类的方法,不是父类的抽象方法,解释见上一篇笔记
}
}
class Cat extends Animal{
@Override //注解,JDK5.0之后加入的,要求下面的方法必须是run的重写
public void run() {
// TODO Auto-generated method stub
System.out.println("Cat run!");
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal a = new Cat();
}
}
第二个内容就是介绍接口:
接口是比抽象类更抽象的类,里面只有常量(注意:没有变量)和抽象方法。接口的常量定义的时候属性永远是public static final。未实现的方法只能是public abstract。这两个默认属性都是可以省略的不用写出来的。接口优势在于一个类可以实现多个接口、一个接口可以继承多个接口。
示例代码:
public interface MyInterface {
String MAX_VALUE = "10000000";
int max_speed = 120;
public void test01();
public int test02(int a,int b);
}
public class MyClass implements MyInterface {
//要想实现接口必须实现其所有的所有的抽象方法。
int v;
@Override
public void test01() {
// TODO Auto-generated method stub
System.out.println("01");
}
@Override
public int test02(int a, int b) {
// TODO Auto-generated method stub
System.out.println("02!");
return 0;
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyInterface a = new MyClass();
//a.v;回报错,接口不能跑到实现它的类里面去调用该类的成员变量.
a.test01();//输出“01”
}
}