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