1.抽象类=类+抽象方法。
1.1.抽象类概念:在程序设计中,有时一个类我们并不需要使用其对象,这样的类,我们会定义成抽象类。
1.2.抽象类的命名规范:规范上抽象类命名使用 Abstract 或 Base 开头。
1.3.抽象类既可以定义抽象方法也可以和其他类一样定义普通方法.。
1.4.抽象类的使用:
1.4.1.抽象类不能被实例化,不能创建对象,只能由其非抽象类的子类去实例化。
1.5.抽象类中也可以向上转型,实现多态。
1.6.抽象类的子类如果是非抽象类,必须重写抽象方法。
1.7.抽象类的子类也可以是抽象类,但子类的子类如果是非抽象类,则必须重写上面两个父类的抽象方法。
1.8.构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
eg:
package com.yhy;
import java.util.Scanner;
import org.jfree.chart.renderer.category.AbstractCategoryItemRenderer;
/**
* 抽象图形类
* @author 22562
*
*/
public abstract class Shape {
private double S;
private double L;
public abstract double getS();
public abstract double getL();
public abstract void getValue();
}
package com.yhy.triangle;
import java.util.Scanner;
import com.yhy.Shape;
/**
* 圆类
* @author 22562
*
*/
public class Circle extends Shape {
Scanner sc=new Scanner(System.in);
final double pi=3.14;
private double Circle_r;
public void getValue() {
System.out.print("请输入该圆的半径r");
Circle_r=sc.nextDouble();
}
public double getS() {
return pi*Circle_r*Circle_r ;
}
public double getL() {
return 2*pi*Circle_r;
}
}
package com.yhy.triangle;
import java.util.Scanner;
/**
* 矩形类
*/
import com.yhy.Shape;
public class Rectangle1 extends Shape {
Scanner sc=new Scanner(System.in);
private double Rectangle_a,Rectangle_b;
public void getValue() {
System.out.println("请输入a,b的值");
Rectangle_a=sc.nextDouble();
Rectangle_b=sc.nextDouble();
}
public double getS() {
return Rectangle_a*Rectangle_b;
}
public double getL() {
return 2*(Rectangle_a+Rectangle_b);
}
}
package com.yhy.triangle;
import java.util.Scanner;
/**
* 正方形类
*/
import com.yhy.Shape;
public class Square extends Shape {
Scanner sc=new Scanner(System.in);
private double Square_a;
public void getValue() {
System.out.print("请输入a的值:");
Square_a=sc.nextDouble();
}
public double getS() {
return Math.pow(Square_a, 2);
}
public double getL() {
return 4*Square_a;
}
}
package com.yhy.triangle;
import java.io.EOFException;
import java.util.Scanner;
import javax.servlet.jsp.tagext.TryCatchFinally;
import com.yhy.Shape;
/**
* 三角形
* @author 22562
*
*/
public class Triangle extends Shape {
Scanner sc=new Scanner(System.in);
private double Triangle_a,Triangle_b,Triangle_c,p;
public void getValue(){
System.out.print("请输入Triangle_a,b,c的值");
Triangle_a=sc.nextDouble();
Triangle_b=sc.nextDouble();
Triangle_c=sc.nextDouble();
// if (a+b<=c ||a-b>=c ) {
// System.out.println("不合格三角形");
//
// return;
// }
try{
p=(Triangle_a+Triangle_b+Triangle_c)/2;
}catch(Exception e){
System.out.println("不合格三角形");
}
}
@Override
public double getS() {
// TODO Auto-generated method stub
return Math.sqrt(p*(p-Triangle_a)*(p-Triangle_b)*(p-Triangle_c));
}
@Override
public double getL() {
// TODO Auto-generated method stub
return Triangle_a+Triangle_b+Triangle_c;
}
}
```java
```package com.yhy.test;
import java.util.Scanner;
/**
* 测试类
*/
import com.yhy.Shape;
import com.yhy.triangle.Circle;
import com.yhy.triangle.Rectangle1;
import com.yhy.triangle.Square;
import com.yhy.triangle.Triangle;
public class Test {
static{
System.out.println("请输入所求图形的编号:");
System.out.println("1————三角形");
System.out.println("2————圆形");
System.out.println("3————矩形");
System.out.println("4————正方形");
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int number=scanner.nextInt();
switch (number) {
case 2:
getResult(new Circle());
break;
case 1:
getResult(new Triangle());
break;
case 3:
getResult(new Rectangle1());
break;
case 4:
getResult( new Square());
break;
}
}
private static void getResult(Shape shape) {//向上转型
shape.getValue();
System.out.println("所求图形周长为:"+shape.getL());
System.out.println("所求图形面积为:"+shape.getS());
}
}