Java抽象类和接口(一)

**********************第九章 抽象类和接口**************************

**************************抽象类**************************


一.why 什么时候想到使用抽象类


需求: 矩形、三角形、圆形


方法:

1. 求周长

2. 求面积

3. 说出我有几条边


4. 简单的介绍我自己

打印: 我是一个图形

原因1:

矩形、三角形、圆形(都有以上4个相同的方法),当多个类中有相同的属性和方法时,

应该把这些属性和方法提取出来,放到一个父类中(Graph 图形类),其他类(矩形、三角形、圆形)继承继承类,来复用图形类的代码..这是我们以前学过的继承..

但是我们发现 当求周长、求面积、说出我有几条边这几个方法 抽到图形类时,图形类

无法准确实现这3个方法或者说实现起来没有意义,这样需要把这三个方法定义成抽象

方法...(没有方法体的方法 或没有实现的方法)..一个类中一旦有一个方法定义成抽象
的,这个类一定要是抽象类...


原因2:

当子类中 对父类继承下来的方法(求周长) 有各自不同的实现的时候,需要使用抽象类

二.what 什么是抽象类


简单的定义(不太准确): 含有抽象方法的类 叫做抽象类..

抽象方法: 没有方法体的方法叫做抽象方法


例如:

public abstract int getLength();//抽象方法


注意:

public abstract int getLength(){

}

不是抽象方法,抽象方法 没有方法体 没有实现,像上面的代码叫做空实现..

(即实现了 但什么也没做)


抽象类是软件设计中的半成品:

1. 有一半是已经完成的

简单介绍一下我自己这个方法 已经实现了 打印我是一个图形


2. 有一半是没有完成的,需要子类去实现它

求周长、求面积、说出我有几条边


三.how 如何定义抽象

需要使用abstract 关键字 修饰类,这个类叫做抽象类


演示代码:

package com.chapter9.演示抽象类;

/**
* 作者: zhangzy
* 公司: 蓝桥软件学院
* 时间: 2017年7月7日 上午9:30:42
* 功能: 演示抽象类
* 抽象类 : 软件设计中的半成品
*/
public abstract class Graph {

//1.求周长
public abstract int getLength();

//2.求面积
public abstract int getArea();

//3.说出我有几条边
public abstract void sayYouJiTiaoBian();

//4.简单的介绍一下我自己
public void simpleIntroduce(){
System.out.println("我是一个图形");
}

public static void main(String[] args) {
//Graph g = new Graph();

}

}


矩形

package com.chapter9.演示抽象类;


public class Rectangle extends Graph{

private int width;
private int height;

public Rectangle(){

}

public Rectangle(int width,int height){
this.width = width;
this.height = height;
}


@Override
public int getLength() {

return 2 * (width + height);
}

@Override
public int getArea() {
return height * width;
}

@Override
public void sayYouJiTiaoBian() {
System.out.println("我是矩形,我有四条边");
}

public static void main(String[] args) {
Rectangle rectangle = new Rectangle(10,30);

int length = rectangle.getLength();

System.out.println(length);
}

}

*************************抽象类的若干知识点****************************

1. 抽象类不能够创建对象

因为它是软件设计中的半成品


2. 子类继承抽象类,子类如果想创建对象,必须要重写抽象类的所有抽象方法,

除非子类也是抽象类


**************************************几个小的面试题*************************


1. 抽象方法能使用private来修饰吗?


不可以. 因为抽象方法 是需要子类去继承然后重写它,而private修饰的方法不能被继承 二者矛盾

2. 抽象类可以没有抽象方法吗???


抽象类可以不包含抽象方法的, 我就是认为这个类是软件设计中的半成品 所以把它定义成抽象类


3. 抽象方法可以定义成静态的吗???


不可以. 因为静态方法 是使用类名调用的 类名.方法名() 调用该方法 并没有做任何事 没有意义

所以抽象方法不能定义成静态的...


4. 抽象方法可以使用final 修饰吗??


不能. final 最终方法 不能被重写 而抽象方法 是需要子类去重写,二者矛盾


5. 抽象类可以使用 final 修饰吗??


不能. final 修饰的类 是最终类 不能被继承 ,而抽象类 需要子类去继承的...二者矛盾

************************************可以修饰类的修饰符******************************


1. 访问控制权限修饰符

public或默认权限

2. 其他

abstract 或 final

strictfp 如果该类用于科学计算 对数值的精度要求比较高 需要使用strictfp 来修饰

猜你喜欢

转载自www.cnblogs.com/MrTanJunCai/p/9906789.html