Java基础---认识抽象类

抽象类

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);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41401295/article/details/106469668