抽象类:
其意义在于为子类提供统一的,规范的模板,子类必须实现相关的抽象方法
- 有抽象方法的类只能定义成抽象类
- 抽象类不能实例化,即不能用new来实例化抽象类
- 抽象类可以包含属性、方法、构造方法。但是构造方法不能用new来实例,只能被子类来调用
- 抽象类只能用来被继承
- 抽象方法必须被子类实现
/**
* 抽象方法 抽象类
* @author l
*
*/
//没有实现 但是子类必须实现
public abstract class Animal { //抽象类
//没有实现 但是子类必须实现
abstract public void shout(); //没有方法体
public void run(){ //可以定义普通方法
}
public static void main(String[] args){
Animal a = new Dog();
a.shout();
}
}
//子类必须重写shout()方法
class Dog extends Animal{
public void shout(){
System.out.println("wangwangwang");
}
}
接口:
接口就是比抽象类还抽象的抽象类,可以更加规范的对子类进行约束。全面地实现了:规范和具体实现的分离
声明格式:
[访问修饰符public] interface 接口名 [extends 父接口1,父接口2]{
常量定义 ;
方法定义;
}
说明: 1.访问修饰符只能是public
2.接口名和类名采用相同命名机制
3.extends接口可以多继承
4.常量 接口中的属性只能是常量 默认public static final修饰
5.方法 接口中的方法只能是 public abstract
接口测试:
package cn.txt.oo;
/**
* 测试接口和实现类
* @author l
*
*/
public class TestInterface {
public static void main(String[] args){
Volant a = new Angel(); //上转型
a.fly(); //只能调fly方法
}
}
//飞行接口
interface Volant{
int FLY_HEIGHT = 100;
void fly();
}
interface Honest{
void helpother();
}
//实现类可以实现多个父接口
class Angel implements Honest,Volant{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("我会飞");
}
@Override
public void helpother() {
// TODO Auto-generated method stub
System.out.println("我喜欢帮助他人");
} //
}
class Goodman implements Honest{
@Override
public void helpother() {
// TODO Auto-generated method stub
System.out.println("我喜欢帮助他人");
}
}
class Bird implements Volant{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("我会飞");
}
}
接口的多继承:
java 的类只有单继承,java的接口可以多继承
用例:
interface A{
void testA();
}
interface B{
void testB();
}
/**
* 接口可以多继承:接口C继承接口A和B
*/
interface C extends A,B{
void test();
}
文章仅限于个人学习,如有错误请指出~!