Java实验三 面向对象(二)

实验目的:

在集成开发环境下,实现类的继承及多态性,运用抽象方法、接口及抽象类来对应实际问题来进行程序编写。

实验目标:

(1)能够运用Java语言来实现类的继承及多态性、熟练使用包来扩展程序功能并能建立自己的包;
(2)能够灵活运用Java语言的抽象方法、接口、抽象类来编写应用程序解决实际问题。

实验内容:

1.设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、等边三角形类来继承图形类,并实现上述两个方法。并创建实例验证。
2.创建一个抽象类动物类以及以下几个接口:进食的接口、睡觉的接口、思考的接口、说话的接口、飞翔的接口。分别定义猫类、人类、鸟类继承动物类并选择实现上述的接口,并创建实例验证。

源代码及结果

1.设计一个抽象类图形类

package experiment21;

public abstract class Picture {
	//求周长
	public abstract Double shapeC();
	//求面积
	public abstract Double shapeS();
}

package experiment21;

public class Rectangle extends Picture{
	private double l;
	private double w;
	
	public void setL(double l) {
		this.l = l;
	}
	public double getL() {
		return l;
	}
	public void setW(double w) {
		this.w = w;
	}
	public double getW() {
		return w;
	}
	
	public Double shapeS(){
		return w*l;
	}
	
	public Double shapeC(){
		return 2*(l+w);
	}
	
	public Rectangle(double l,double w){
		this.l = l;
		this.w = w;
	}
}

package experiment21;

public class Round extends Picture{
	private	double r;

	public void setR(double r) {
		this.r = r;
	}

	public double getR() {
		return r;
	}
	
	public Double shapeS(){
		return 3.14*r*r;
	}
	public Double shapeC(){
		return 3.14*2*r;
	}
	
	public Round(double r){
		this.r = r;
	}
}

package experiment21;

public class Triangle extends Picture{
	private double l;
	
	public void setL(double l) {
		this.l = l;
	}
	public double getL() {
		return l;
	}
	
	public Double shapeS(){
		double s = (3*l) / 2;
        double area = Math.pow(s*((s - l)*(s - l)*(s - l)), 0.5);
        return area;
	}
	public Double shapeC(){
		return 3*l;
	}
	
	public Triangle(double l){
		this.l = l;
	}
	
}

package experiment21;

public class Test {
	public static void main(String[] args){
		Rectangle rectangle=new Rectangle(3.4,4);
		System.out.println("长为:"+rectangle.getL()+"宽为:"+rectangle.getW()+"矩形面积为:"+rectangle.shapeS()+"矩形的周长为:"+rectangle.shapeC());
		Round round=new Round(1.25);
		System.out.println("半径为:"+round.getR()+"圆形面积为:"+round.shapeS()+"圆形的周长为:"+round.shapeC());
		Triangle triangle=new Triangle(7.9);
		System.out.println("边长为:"+triangle.getL()+"等边三角形面积为:"+triangle.shapeS()+"等边三角形的周长为:"+round.shapeC());
	}
}

在这里插入图片描述

2.创建一个抽象类动物类

package experiment22;

public abstract class Animal {
	private String sex;
	private int age;
	
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getSex() {
		return sex;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getAge() {
		return age;
	}
	
	public Animal(String sex,int age){
		this.sex = sex;
		this.age = age;
	}
	
}

package experiment22;

public class Bird extends Animal implements EatIF, FlyIF, SleepIF, SpeakIF{
	
	public Bird(String sex, int age) {
		super(sex, age);
	}

	public void eat() {
		System.out.println("鸟吃米");

	}

	public void fly() {
		System.out.println("鸟会飞");

	}

	public void sleep() {
		System.out.println("鸟站着睡");

	}

	public void speak() {
		System.out.println("鸟:喳喳叫");

	}

}

package experiment22;

public class Cat extends Animal implements EatIF, SleepIF, SpeakIF {

	public Cat(String sex, int age) {
		super(sex, age);
	}

	public void eat() {
		System.out.println("猫咪吃猫粮");

	}

	public void sleep() {
		System.out.println("猫咪趴着睡");

	}

	public void speak() {
		System.out.println("猫咪:喵~");

	}

}

package experiment22;

public class Human extends Animal implements EatIF, SleepIF, SpeakIF, ThinkIF {

	public Human(String sex, int age) {
		super(sex, age);
	}

	public void eat() {
		System.out.println("人吃火锅、炸鸡、汉堡");

	}

	public void sleep() {
		System.out.println("人躺着睡");

	}

	public void speak() {
		System.out.println("人想挣钱");

	}

	public void think() {
		System.out.println("人说中文、英文");

	}
	

}

package experiment22;

public interface EatIF {
	public void eat();
}

package experiment22;

public interface FlyIF {
	public void fly();
}

package experiment22;

public interface SleepIF {
	public void sleep();
}

package experiment22;

public interface SpeakIF {
	public void speak();
}

package experiment22;

public interface ThinkIF {
	public void think();
}

package experiment22;

public class Text {

	public static void main(String[] args) {
		Cat c = new Cat("公",3);
		c.eat();
		c.speak();
		c.sleep();
		Human h = new Human("女",18);
		h.eat();
		h.speak();
		h.sleep();
		h.think();
		Bird b = new Bird("公",2);
		b.eat();
		b.sleep();
		b.speak();
		b.fly();

	}

}

在这里插入图片描述

实验小结

通过这实验,我有了以下的收获:
(1)关键字abstract,可以修饰类,也可以修饰方法。
(2)修饰类的话,可以创建构造方法,但是不可以被实例化,创建构造方法的目的是为了子类的调用。
(3)有抽象方法的类一定是抽象类,抽象类可以没有抽象方法,抽象类可以有非抽象方法。
(4)如果抽象类的子类重写了所有的抽象方法,子类可以是非抽想类,则可以实例化。
(5)如果抽象类的子类没有重写了所有的抽象方法,则子类是抽想类,不可以实例化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值