java 抽象类和抽象方法_Java——抽象类和抽象方法

抽象方法和抽象类必须使用 abstract 修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法。

》抽象方法和抽象类的规则如下:

》抽象类必须使用 abstract 修饰符来定义,抽象方法也必须使用 abstract 修饰符来修饰,抽象方法不能有方法体。

》抽象方法不能被实例化,实例化的工作应该交由它的子类来完成,它只需要一个引用即可。

》抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初识化块、内部类(接口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。

》含有抽象方法的类(包含直接定义了一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法三种情况)只能被定义成抽象类。

》abstract 不能与 private、static 、 final 或 native 并列修饰同一个方法

》abstract 不能与 final 并列修饰一个类

》子类中的抽象方法不能与父类的抽象方法同名。

》抽象方法必须由子类来进行重写,否则没有存在的意义。

》父类

public abstract classShape {privateString color;//定义一个计算周长的抽象方法

public abstract double calPerimeter(); //抽象方法,不能有方法体//定义一个返回形状的抽象方法

public abstractString getType();//定一个Shape 的构造器,该构造武器并不是用于创建Shape 对象//而是用于被子类调用

publicShape() {

}publicShape(String color) {

System.out.println("执行 Shape 的构造器");this.color=color;

}publicString getColor() {returncolor;

}public voidsetColor(String color) {this.color =color;

}

}

》子类

public classTriangle extends Shape {private doublea;private doubleb;private doublec;public Triangle(String color, double a, double b, doublec) {

super(color);this.setSides(a, b, c);

}public void setSides(double a,double b,doublec){if(a>=b+c || b>=a+c || c>= a+b){

System.out.println("三角形两边之和必须大于第三边");return;

}this.a=a;this.b=b;this.c=c;

}//重写父类方法

@Overridepublic doublecalPerimeter() {return a+b+c;

}

@OverridepublicString getType() {return "三角形";

}

}

public classCircle extends Shape {private doubleradius;public Circle(String color, doubleradius) {

super(color);this.radius =radius;

}public void setRadius(doubleradius){this.radius=radius;

}//重写父类的计算周长方法

@Overridepublic doublecalPerimeter() {return 2* Math.PI *radius;

}

@OverridepublicString getType() {return getColor() +"圆形";

}public doublegetRadius() {returnradius;

}

}

》测试类

public static voidmain(String[] args) {

Shape s1= new Triangle("黑色",3,4,5);

Shape s2=new Circle("黄色",3);

System.out.println(s1.getType());

System.out.println(s1.calPerimeter());

System.out.println(s2.getType());

System.out.println(s2.calPerimeter());

}

注意:abstract 不能用于修饰成员变量,不能用于修饰局部变量,即没有抽象变量、没有抽象成员变量等说法;abstract 也不能用于修饰构造器,没有抽象构造器,抽象类里面定义的构造器只能是普通构造器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值