在java中,abstract关键通常用来修饰方法和类。
没有方法体的方法称为抽象方法。
例如:
public void fn(); //该方法定义中没有方法体。
使用abstract修饰的类就是抽象类
例如:
public abstract class Animal{
}
抽象类有以下特征: 1)抽象不能实例化,只能实例化抽象类的子类(前提条件是子类也不能是抽象类)。 2)有抽象方法的类一定是抽象类。 3)抽象类不一定有抽象方法。 4)抽象可以有构造方法。 5)抽象类通常用来描述一个抽象的概念。结合子类表示了,xxx is a xxx的概念。
例如以下概念: 狗是动物,所以动物是抽象类,狗是动物的子类。 苹果是水果,所以水果是抽象类,苹果是水果的子类。 三角形是形状,所以形状是抽象类,三角形是形状的子类。 ...
实现代码如下:
//////////////////////////////////////////////
//动物类
public abstract class Animal{
//动物吃饭的抽象方法
public abstract void eat(); //有抽象方法的类,一定是抽象类。
}
//狗狗类
public class Dog extends Animal {
//方法重写
@Override
public void eat() {
System.out.println("啃骨头...");
}
}
//狗是动物,所以动物是抽象类,狗是动物的子类。
///////////////////////////////////////////////
//水果类
public abstract class Fruit{
}
//苹果类
public class Apple extends Fruit{
}
//苹果是水果,所以水果是抽象类,苹果是水果的子类。
//////////////////////////////////////////////
//形状类
public abstract class Shape{
//求形状的周长
public abstract double getCircle();
//求形状的面积
public abstract double getArea();
}
//三角形类
public class Triangle extends Shape {
int a,b,c;
Triangle (int a,int b,int c){
this.a = a;
this.b = b;
this.c = c;
}
//判断是否构成三角形
public boolean isTrigle(){
if(a+b<=c||a+c<=b||b+c<=a){
System.out.println("不构成三角形");
return false;
}
return true;
}
//方法重写
@Override
public double getArea() {
if(this.isTrigle()) {
double p = (a + b + c) / 2.0;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));//海伦公式计算三角形面积
}else{
return -1;
}
}
//方法重写
@Override
public double getCircle() {
if(this.isTrigle()) {
return a + b + c;
}else{
return -1;
}
}
}
//三角形是形状,所以形状是抽象类,三角形是形状的子类。
1)abstract可以用来修饰方法和类。
2)abstract修饰方法,表示是抽象方法,抽象方法没有方法体。
3)abstract修饰类,表示是抽象类,抽象类不能实例化。
4)抽象类通常描述一些抽象的概念,集合子类表达了 xxx is a xxx 的概念。