java基础12 抽象类(及关键字:abstract)
抽象类:abstract
1、应用的场景
我们描述一类事物时,存在着某种行为,但这种行为目前不具体,那么我们就可以抽取这种行为的声明,但是不去实现这种行为,我们就需要使用抽象类.
2、抽象的好处
强制要求非抽象的子类一定实现父类抽象的方法
3、抽象类需要注意的细节
1.如果一个函数没有方法体,那么该函数必须要使用抽象来修饰,把该函数修饰成抽象函数
2.如果一个类中出现抽象函数,那么该类必须使用abstract修饰
3.如果一个非抽象类继承了抽象类,那么必须实现抽象类的所有抽象函数.
4.抽象类可以不存在抽象方法(无意义)
因为抽象类的作用:强制要求非抽象的子类一定实现父类抽象的方法,如果不要抽象方法,name就没意义了
5.抽象类不能实例化
为什么抽象类不能实例化呢?
因为抽象类存在抽象的方法,如果能让抽象类实例化,那么使用抽象的对象就能调用抽象的方法,就毫无意义了;
6.抽象类是存在着构造函数,其构造函数是提供子类创建对象时初始化父类的的属性;
4、abstract不能与以下几个关键字修饰用一个方法
1.abstract不能与与private修饰同一个方法;
2.abstract不能与static修饰同一个方法;
3.abstract不能与final修饰同一个方法
5、附:常量的命名规范
全部字母都要大写,单词与单词之间 使用下划线分割;
6、抽象类实例
1 /* 2 需求:描述一个图形,圆形,矩形三个类.不管那种图形都具备计算面积和周长的行为, 3 但是每种图形的计算方式不一样; 4 */ 5 abstract class MyShape{ //抽象类 6 final static double PI=3.14; 7 String name; 8 public MyShape(String name){ 9 this.name=name; 10 } 11 public abstract void getArea(); //抽象方法 12 public abstract void getLength(); //抽象方法 13 } 14 15 class Circle extends MyShape{ 16 int r; 17 public Circle(String name,int r){ 18 super(name); //super或者this调用构造时,必须位于第一句.所以super和this不能同在一个构造器中. 19 this.r=r; //这里不需要,因为这里调用的是属性. 20 } 21 public void getArea(){ 22 System.out.println("这是圆形的面积"+(r*r*pi)); 23 } 24 public void getLength(){ 25 System.out.println("这是圆形的周长"+(2*pi*r)); 26 } 27 } 28 29 class Rectangles extends MyShape{ 30 int width; 31 int length; 32 public Rectangles(String name,int width,int length){ 33 super(name); 34 this.width=width; 35 this.length=length; 36 } 37 public void getArea(){ 38 System.out.println("这是矩形的面积"+(width*length)); 39 } 40 public void getLength(){ 41 System.out.println("这是矩形的周长"+2*(width+length)); 42 } 43 } 44 class Demo3{ 45 public static void main(String[] args){ 46 Circle c=new Circle("圆形",5); 47 c.getLength(); 48 c.getArea(); 49 /* 50 Rectangles r=new Rectangles("矩形",12,4); 51 r.getLength(); 52 r.getLength(); */ 53 54 } 55 }
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:http://www.cnblogs.com/dshore123/p/8867093.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |