抽象类
abstract:抽象的 , 可以修饰类和方法
可以定义抽象方法的类,就是抽象类
格式:
abstract class 类名 {
public abstract 返回值类型 方法名();
}
抽象方法:只有方法的声明部分,没有方法的实现部分
说明:对于父类中定义的非私有的方法,子类有不同的实现的时候,在父类类型中不需要对方法进行实现,只需要声明出 来,将来子类继承之后,重写父类中的方法,不同的子类有不同的实现。
抽象类的特点
1.抽象方法所在的类,一定是抽象类;但是抽象类中未必就有抽象方法,可以有非抽象方法。
2.抽象类不能创建对象,但是可以声明引用(是有构造方法的),抽象类的对象其实是存在的,只是不能通过new关键字手动创建对象,而是在创建子类对象的时候,由jvm自动调用抽象类的构造方法创建对象。
3.一个类是否有构造方法,不取决于该类是否能够创建对象,而是取决于该类是否有成员变量,如果可以定义成员变量,就要初始化成员变量,构造方法就是对成员变量进行赋值的。
4.一个类继承了抽象类后,子类可以全部重写父类的抽象方法,这时候子类就是一个普通类,也可以不全部重写,那么子类也是一个抽象类。
案例、图形面积和周长的计算
public class Demo2 {
}
abstract class Shape{
public abstract double area() ;
public abstract double girth() ;
public void name(){
System.out.pringtln("我是一个图形类");
}
}
class Circle extends Shape{
private double r;
public Circle() {
super();
}
public Circle(double r) {
super();
this.r = r;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
@Override
public double area() {
return Math.PI*r*r;
}
@Override
public double girth() {
return Math.PI*2*r;
} }
abstract class Rect extends Shape{
private double width;
private double length;
public Rect() {
super();
}
public Rect(double width, double length) {
super();
this.width = width;
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
@Override
public double area() {
return length*width;
}
public abstract double girth() ;
}
案例2
package com.ujiuye.demos;
public class Demo_7 {
public static void main(String[] args) {
Woman w1 = new Woman("黑寡妇");
System.out.println(w1.getName());
}
}
abstract class Human {
private String name = "人类";
final int AGE = 200;
public Human() {
}
public Human(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Woman extends Human {
public Woman() {
}
public Woman(String name) {
super(name);
}
}