一、抽象类
1、定义
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类为抽象类。
2、抽象方法
只包含一个方法名,没有方法体,使用abstract修饰。
注:
- 抽象类必须要用abstract修饰
- 抽象类不能使用new操作符创建它的实例,但是仍然可以定义它的构造方法,这个构造方法在它的子类的构造方法中调用
- 在抽象类扩展的非抽象子类中,必须实现所有的抽象方法
- 包含抽象方法的类必须是抽象的, 但抽象类中不一定有抽象方法
- 抽象类中的所有抽象方法必须在子类中被重写
3、实例
- 定义一个抽象类
public abstract class People
{
public abstract void id();
public abstract void todo();
}
- 定义一个子类继承这个抽象父类
public class student extends People
{
public void id()
{
System.out.println("学生");
}
public void todo()
{
System.out.println("好好学习");
}
}
注:如果不重写父类中的所有抽象方法就会报如下错误
- 再测试一下
public class test
{
public static void main(String[] args)
{
student s = new student();
s.id();
s.todo();
}
}
最后程序的输出结果是
学生
好好学习
二、接口
1、定义
接口是一种与类相似的结构,只包含常量和抽象方法
在Java中,接口被看作是一种特殊的类,使用接口或多或少有点像使用抽象类。与抽象类相似,不能使用new操作符创建接口的实例。
接口的定义与类比较相似,只不过 接口是通过interface关键字来完成
- Java采用下面的语法来定义接口
修饰符 interface 接口名
{
/** 常量声明 */
/** 方法签名 */
}
注:
- 接口中所有属性默认为: public static final
- 接口中所有方法默认为: public abstract
- 接口不再像类一样用关键字extends去继承, 而是用implements去实现,也就是说类和接口的关系叫做实现
2、实例
- 首先定义一个接口
public interface People
{
public static final int age = 18;
public abstract void id();
public abstract void todo();
public abstract void myAge();
}
- 用一个类去实现接口
public class student implements People{
public void id()
{
System.out.println("学生");
}
public void todo()
{
System.out.println("好好学习");
}
public void myAge()
{
System.out.println(age);
}
}
- 测试
public class test
{
public static void main(String[] args)
{
student s = new student();
s.id();
s.todo();
s.myAge();
}
}
输出结果为:
学生
好好学习
18
注:由于接口中所有的数据域都是 public static final , 而且所有的方法都是 public abstract , 所以 Java允许忽略这些修饰符,所以上面的接口与下面的接口是等价的
public interface People
{
int age = 18;
void id();
void todo();
void myAge();
}