新建一个抽象父类:
如果在一个方法前写了abstruct抽象方法 抽象方法没有方法体 不能直接被调用 如果这个类有抽象方法 那么一定在前面加上抽象方法 抽象方法必须由子类重写方法 抽象类不能被实例化 抽象类一般做父类使用 他声明了一些方法 但没有去实现 交给子类去实现 构造方法用于对类的成员变量进行初始化
//抽象方法 abstract
//对于不知道该怎么实现的方法,我们可以声明为抽象方法
//抽象方法只有声明,没有实现
//如果 一个类包含抽象方法,那么这个类必须声明为抽象类(abstract class)
public abstract void eat();
//加上abstract 定义抽象类
//抽象类中不一定有抽象方法
public abstract class Animal {
private String name;
private String color;
public Animal() {
super();
}
public Animal(String name, String color) {
super();
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
再新建一个子类:
public class Tiger extends Animal {
@Override
public void eat() {
System.out.println("吃人了~");
}
}
新建main方法运行类:
public class Application1 {
public static void main(String[] args) {
/*
* 抽象类的特点:
* 1、不能创建抽象类的对象
* Animal animal = new Animal(); 不能用
* 2、抽象类可以有抽象方法
* 3、抽象类的子类必须实现所拥有的抽象方法,否则子类也要是抽象类
*/
Tiger tiger = new Tiger();
tiger.eat();
//抽象的作用:
//作为模板而存在,定义一组子类共有的属性和方法
//这个模板是没有具体意义的,通过abstract 禁止创建对象
//强制子类必须重写抽象方法
//让程序变得更稳定
}
}
final 类的特点
被final修饰的类不能被继承 final的属性和变量 不能被重新赋值 系统都会给final默认的初始值 在声明时赋值 final不能再子类中覆盖 也就是final不能被重写 final能修饰变量属性 类方法
interface 接口
类实现多个接口弥补了类不能多继承的缺点 具体的接口和类的区别如下:
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以多继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static 而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的
所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。