面向对象高级之抽象类与接口简单实例

面向对象及实例讲解

抽象 实例

需求
:3、设计三个类,分别如下:(知识点:抽象类及抽象方法)


3.1 设计Shape表示图形类,有面积属性area、周长属性per,颜色属性color,有两个构造方法(一个是默认的、一个是为颜色赋值的),还有3个抽象方法,分别是:getArea计算面积、getPer计算周长、showAll输出所有信息,还有一个求颜色的方法getColor。


3.2 设计 2个子类:
3.2.1 Rectangle表示矩形类,增加两个属性,Width表示长度、height表示宽度,重写getPer、getArea和showAll三个方法,另外又增加一个构造方法(一个是默认的、一个是为高度、宽度、颜色赋值的)。


3.2.2 Circle表示圆类,增加1个属性,radius表示半径,重写getPer、getArea和showAll三个方法,另外又增加两个构造方法(为半径、颜色赋值的)。


3.3 在main方法中,声明创建每个子类的对象,并调用2个子类的showAll方法。



继承
继承
Shape 图形 抽象类
Rectangle 矩形类
Circle 圆类

Shape 图形 抽象类

public abstract class Shape {
	protected double area;
	protected double per;
	protected String color;
	
	public Shape(String color) {
		this.color = color;
	}
	
	public Shape() {
	}
	public abstract double getArea();
	public abstract double getPer() ;
	public abstract String getColor();
	public abstract void setColor(String color);
	public abstract void showAll();
}

Rectangle矩形类

public class Rectangle extends Shape{
	private double width;
	private double height;
	
	/**
	 * 重写获取周长方法
	 */
	@Override
	public double getPer() {
		return (width+height)*2;
	}
	
	public Rectangle(String color) {
		super(color);
	}

	public Rectangle(String color, double width, double height) {
		super(color);
		this.width = width;
		this.height = height;
	}

	/**
	 * 重写获取面积方法
	 */
	@Override
	public double getArea() {
		return width*height;
	}

	public double getWidth() {
		return width;
	}

	public void setWidth(double width) {
		this.width = width;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}

	@Override
	public void showAll() {
		// TODO Auto-generated method stub
		System.out.println("颜色:"+getColor()+"色"+",周长:"+getPer()+",面积:"+getArea()+",宽:"+width+",高:"+height+".");
	}

	@Override
	public String getColor() {
		// TODO Auto-generated method stub
		return this.color;
	}

	@Override
	public void setColor(String color) {
		// TODO Auto-generated method stub
		this.color = color;
	}
}

Circle 圆类


public class Circle extends Shape {

	private double radius;
	
	
	public Circle(String color) {
		super(color);
	}

	public Circle(String color, double radius) {
		super(color);
		this.radius = radius;
	}

	@Override
	public double getArea() {
		// TODO Auto-generated method stub
		return radius*2*Math.PI;
	}

	@Override
	public double getPer() {
		// TODO Auto-generated method stub
		return radius*radius*Math.PI;
	}

	@Override
	public void showAll() {
		System.out.println("颜色:"+getColor()+"色"+",周长:"+getPer()+",面积:"+getArea()+",半径:"+radius+".");
	}

	@Override
	public String getColor() {
		return this.color;
	}

	@Override
	public void setColor(String color) {
		this.color = color;
	}
	
}

Test测试类

public class Test {
	public static void main(String[] args) {
		Rectangle r = new Rectangle("红",53,64);
		Circle c = new Circle("黑",3);
		r.showAll();
		c.showAll();
		
	}
}

运行结果
在这里插入图片描述
通过抽象,把父类的方法交给子类去实现,但值得注意的是,构造方法是不能进行抽象的,但要注意,一个子类只能继承一个抽象类,不能继承多个



接口 实例

5、利用接口实现动态的创建对象[选做题]
5.1 创建4个类:
苹果
香蕉
葡萄
园丁
5.2 在三种水果的构造方法中打印一句话.
以苹果类为例
class apple
{
public apple()
{
System.out.println(“创建了一个苹果类的对象”);
}
}
5.3 要求从控制台输入一个字符串,根据字符串的值来判断创建三种水果中哪个类的对象



<<接口>>
__Fruit__
Apple
Pear
Banana
Gardener
________
+create方法:
Fruit

Fruit接口

public interface Fruit {
	
}

Apple类

public class Apple implements Fruit {
	public Apple() {
		System.out.println("创建一个苹果类");
	}

	
}

Banana

public class Banana implements Fruit{
	public Banana() {
		// TODO Auto-generated constructor stub
		System.out.println("创建了一个香蕉类");
	}

	
	
}

Pear类


public class Pear implements Fruit {
	
	public Pear() {
		// TODO Auto-generated constructor stub
		System.out.println("创建了一个梨类");
	}
}

Gardener类

public class Gardener {
	
	public Fruit create(String str) {
		Fruit fruit;
		switch (str) {
		case "apple":
			fruit =new Apple();
			break;
		case "pear":
			fruit = new Pear();
			break;
		case "banana":
			fruit = new Banana();
			break;
		default:
			fruit = null;
			System.err.println("没有这个类");
			break;
		}
		
		return fruit; 
	}
	
}

Test测试类


import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		Gardener e = new Gardener();
		Scanner sc = new Scanner(System.in);
		System.out.println("输入水果");
		String fruit = sc.next();
		e.create(fruit);
	}
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值