6.5.1 抽象方法和抽象类
来源:互联网 发布:淘宝如何买东西便宜 编辑:程序博客网 时间:2024/06/10 04:28
抽象方法是只有方法签名,没有方法实现的方法。
抽象方法和抽象类必须使用abstract修饰符来定义。
抽象类必须使用abstract修饰符来修饰
抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。
抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、枚举)5种成分
含有抽象方法的类只能被定义成抽象类。
抽象方法失去了一个能力:抽象类不能用于创建实例。
定义抽象方法只需要在普通方法上增加abstract修饰符,并把普通方法的方法体也就是方法后花括号括起来的部分全部去掉,并在方法后增加分号即可。
package chap6_5;public abstract class Shape { { System.out.println("执行Shape的初始化块..."); } private String color; public abstract double calPerimeter(); public abstract String getType(); public Shape() { // TODO Auto-generated constructor stub } public Shape(String color) { System.out.println("执行Shape的构造器..."); this.color=color; } public String getColor() { return color; } public void setColor(String color) { this.color = color; }}
package chap6_5;public class Triangle extends Shape { private double a; private double b; private double c; public Triangle(String color, double a, double b, double c) { // TODO Auto-generated constructor stub super(color); this.setSides(a, b, c); } private void setSides(double a, double b, double c) { // TODO Auto-generated method stub if (a >= b + c || b >= a + c || c >= a + b) { System.out.println("三角形两边之和必须大于第三边"); return; } this.a = a; this.b = b; this.c = c; } @Override public double calPerimeter() { // TODO Auto-generated method stub return a + b + c; } @Override public String getType() { // TODO Auto-generated method stub return "三角形"; }}
package chap6_5;public class Circle extends Shape { public double radius; public Circle(String color, double radius) { // TODO Auto-generated constructor stub super(color); this.radius = radius; } public void setRadius(double radius) { this.radius = radius; } @Override public double calPerimeter() { // TODO Auto-generated method stub return 2 * Math.PI * radius; } @Override public String getType() { // TODO Auto-generated method stub return getColor() + "圆形"; } public static void main(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()); }}
运行结果
执行Shape的初始化块...执行Shape的构造器...执行Shape的初始化块...执行Shape的构造器...三角形12.0黄色圆形18.84955592153876
利用抽象类和抽象方法的优势,可以更好地发挥多态的优势,使得程序更加灵活。
当使用abstract修饰类时,表明这个类只能被继承,当使用abstract修饰方法时,表明这个方法必须由子类提供实现(即重写)。而final修饰的类不能被继承,final修饰的方法不能被重写,因此final和abstract永远不能同时使用。
abstract方法不能定义为private访问权限,即private和abstract不能同时修饰方法。
0 0
- 6.5.1 抽象方法和抽象类
- 抽象类和抽象方法
- 抽象类和抽象方法
- 抽象方法和抽象类
- 抽象方法和抽象类
- 抽象类和抽象方法
- 抽象类和抽象方法
- 抽象方法和抽象类
- 抽象方法和抽象类
- 抽象类和抽象方法
- 抽象类和抽象方法
- 抽象方法和抽象类
- 抽象方法和抽象类
- 抽象类和抽象方法
- 抽象方法和抽象类
- 抽象类和抽象方法
- 抽象方法和抽象类
- 抽象类和抽象方法
- ListView 详解
- android WebView全面总结
- windows/mfc面试题一套
- Caffe的Python接口
- java面试100题以及答案
- 6.5.1 抽象方法和抽象类
- H - Can you answer these queries? HDU 4027 (线段树+延迟标记+开根号的速度)
- 浅析JVM垃圾回收机制
- xcode注释
- log4j在线视频教程【讲的很详细,不了解的情况下,听一遍就都了解】
- Java使用HTTP的get方法读取网络数据、使用post方法与网络交互通信
- 支持向量机smo算法
- 欢迎使用CSDN-markdown编辑器
- 背包问题-poj1742