zoukankan      html  css  js  c++  java
  • java 基础(抽象类)

         在某些情况下,父类只知道子类该实现什么样的方法,而不知道方法的具体实现,就可以定义抽象类,例如:父类shape,子类:circle;父类提供了计算周长的方法,但子类实现周长计算的方法是不一样的,比如,圆形,三角形;抽象类只提供方法签名,没有实现(由其子类实现)。

         类和方法都是由abstract修饰。

    package com.creditharmony.adapter.testCase.test;
    
    /*
     * 抽象类
     * */
    public abstract class ShapeTest {
    	{
    		System.out.println("这是抽象类里的初始化块");
    	}   
    	
    	private String color;
    	// 计算周长的抽象方法
    	public abstract double caperimagter();
    	// 返回形状的抽象方法
    	public abstract String getType();
    	// 定义构造器,该构造器不是用来生成对象,而是用来被对象调用
    	public ShapeTest(){};
    	// 再来一个
    	public  ShapeTest(String color) {
    		System.out.println("执行形状的构造器……,color:"+color);
    		this.setColor(color);
    	}
    	public String getColor() {
    		return color;
    	}
    	public void setColor(String color) {
    		this.color = color;
    	}
    }
    

     三角形类:

    package com.creditharmony.adapter.testCase.test;
    
    public class TriangleShape extends ShapeTest {
    
    	// 定义三角形的三条边
    	private double a;
    	private double b;
    	private double c;
    
    	@Override
    	public double caperimagter() {
    
    		return a + b + c;
    	}
    
    	@Override
    	public String getType() {
    		// 返回形状
    		return "三角形";
    	}
    
    	public TriangleShape(String color, double a, double b, double c) {
    		super(color);
    		setSides(a, b, c);
    	}
    
    	private void setSides(double a, double b, double c) {
    		if (a > b + c || b > a + c || c > a + b) {
    			System.out.println("三角形的两边之和必大于第三边");
    			return;
    		}
    		this.a = a;
    		this.b = b;
    		this.c = c;
    	}
    
    }
    

     圆形:

    package com.creditharmony.adapter.testCase.test;
    
    /*
     * 圆形
     * */
    public class CircleShape extends ShapeTest {
    
    	private double radius;
    
    	public CircleShape(String color,double radius) {
    		 super(color);
    		 this.radius=radius;
    	}
    
    	@Override
    	public double caperimagter() {
    		// 周长
    		return 2*Math.PI*radius;
    	}
    
    	@Override
    	public String getType() {
    		return getColor()+ "圆形";
    	}
    
    	public void setRadius(double radius) {
    		this.radius = radius;
    	}
    	
    	public static void main(String[] args) {
    		ShapeTest s1=new TriangleShape("红色", 12.2, 12, 12);
    		ShapeTest s2=new CircleShape("黄色", 5);
    		System.out.println(s1.getType());
    		System.out.println(s1.caperimagter());
    		System.out.println(s2.getType());
    		System.out.println(s2.caperimagter());
    	}
    
    }
    
  • 相关阅读:
    crontab自动备份MySQL数据库并删除5天前备份
    使用ShowDoc在线管理API接口文档
    概率计算(抽奖活动、命中率)
    保护隐私?找回已记住的秘密?你的余额宝、淘宝还安全吗?
    自制公众平台Web Api(微信)
    我为什么期待M#?
    在.net中为什么第一次执行会慢?
    记”Uri.IsWellFormedUriString”中的BUG
    公司ERP系统重构那些事
    Koala Framework是什么?我为什么要写这个框架?
  • 原文地址:https://www.cnblogs.com/hoge/p/6340883.html
Copyright © 2011-2022 走看看