Java面向对象抽象类关键字----abstract

Java面向对象中抽象类关键字(abstract)的基础运用

        //abstract 抽象关键字!
		/*
		 * 注意:abstract只能修饰类和方法!
		 * 特点:
		 * 1.抽象方法必须放在抽象类中
		 * 2.抽象方法省略{ },只需声明方法即可!
		 * 3.抽象类--->被子类继承--->创建对象(其实就是抽象类不可以new对象)
		 * 4.抽象类中可以有普遍方法,也可以有抽象方法
		 * 5.非抽象类继承类是,子类必须重写抽象勒种的抽象方法
		 */

来让我们直观看一下抽象类怎么用~

package com.abs;

//抽象类
public abstract class Player {
	public String name; //运动员的姓名属性
	
	public void sleep() {
		System.out.println("来来来!一起睡觉!");
	}
// 抽象方法
	public abstract void sports(); //用abstract时不需要身体 即{ }
}
package com.abs;

public class PingPangPlayer extends Player {

	//子类必须事先父类的抽象方法
	@Override
	public void sports() {
		System.out.println("好好学习,天天向上");	
	}
	
}
​
package com.abs;

public class Main {

public static void main(String[] args) {

     Player play = new PingPangPlayer();
     play.name = "邓亚萍";

     //调用从父类中继承来的公共方法
     play.sports();
     foolballPlayer.sports();
 		 
	}

}

​

下面来举个栗子:

请使用抽象类来实现下列要求

1.形状:正方形 长方形 圆形

2.计算正方形的面积和周长

3.计算长方形的面积和周长

4.计算圆形的面积和周长

实现代码如下:

package com.abs2;

public abstract class absExcise {
	  
	private double esge; //边长
	private double r;//圆的半径
	private double width,height;//长方形的长宽
      
    //抽象方法
    public abstract void mianji(); //计算面积
    public abstract void zhouchang(); //计算周长

    //定义getters和setters
	public double getEsge() {
		return esge;
	}

	public void setEsge(double esge) {
		this.esge = esge;
	}

	public double getR() {
		return r;
	}

	public void setR(double r) {
		this.r = r;
	}

	public double getWidth() {
		return width;
	}

	public void setWidth(double width) {
		this.width = width;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}

	public absExcise() {
		
	}

	public absExcise(double esge, double r, double width, double height) {
		super();
		this.esge = esge;
		this.r = r;
		this.width = width;
		this.height = height;
	}

	@Override
	public String toString() {
		return "absExcise [esge=" + esge + ", r=" + r + ", width=" + width + ", height=" + height + "]";
	}
      
      
}
package com.abs2;

public class square extends absExcise {
    //正方形
	@Override
	public void mianji() {
		double result = super.getEsge() * super.getEsge();
		System.out.println("正方形的面积" + result);
	}
	
	@Override
	public void zhouchang() {
		double result2 = super.getEsge() * 4.0;
		System.out.println("正方形的周长" + result2);
		
	}
}
package com.abs2;

public class specal_square extends absExcise{
     //长方形 
      @Override
     public void mianji() {
    	double result = super.getWidth() * super.getHeight();
    	System.out.println("长方形的面积" + result);
    }
      
      @Override
    public void zhouchang() {
    	double result2 = super.getHeight() * 2 + super.getWidth() * 2;
    	System.out.println("长方形的周长" + result2);
    }
}
package com.abs2;

public class resceal_yuan extends absExcise{
    //圆形
	@Override
	public void mianji() {
		double result = super.getR() * 3.14 * super.getR();
		System.out.println("圆的面积为" + result);
	}
	
	@Override
	public void zhouchang() {
		double result2 = 2 * 3.14 * super.getR();
		System.out.println("圆的周长" + result2);
	}
}
package com.abs2;

public class Main {

	public static void main(String[] args) {
		absExcise abs = new specal_square();
		absExcise abs2 = new square();
		absExcise abs3 = new resceal_yuan();
		
		abs.setWidth(20); //给长方形的宽度赋值
		abs.setHeight(10);//给长方形的长度赋值
		abs.mianji();
		abs.zhouchang();
		
		abs2.setEsge(10); //给正方形的边长赋值
		abs2.mianji();
		abs2.zhouchang();
		
		abs3.setR(32); //给圆形的半径赋值
		abs3.mianji();
		abs3.zhouchang();
		
	}

}

 

发布了59 篇原创文章 · 获赞 11 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章