java基础——抽象(abstract)

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());
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值