JAVA面向对象习题练习

第一题

知识点:抽象类
语法点:继承,抽象类
按步骤编写代码,效果如图所示:
编写步骤:
1. 定义抽象类 A ,抽象类 B 继承 A ,普通类 C 继承 B
2. A 类中,定义成员变量 numa ,赋值为 10 ,抽象 showA 方法。
3. B 类中,定义成员变量 numb ,赋值为 20 ,抽象 showB 方法。
4. C 类中,定义成员变量 numc ,赋值为 30 ,重写 showA 方法,打印 numa ,重写 showB 方法,打印
numb ,定义 showC 方法,打印 numc
5. 测试类 Test09 中,创建 C 对象,调用 showA 方法, showB 方法, showC 方法。
public class Test1 {
public static void main(String[] args) {
	A a=new C();
	B b=new C();
	C c=new C();
	c.showA();
	c.showB();
	c.showC();
}
}
abstract class A{
	int numa=10;  //默认
	abstract void showA();
}

abstract class B extends A{
	protected int numb=20;
	abstract void showB();
}

class C extends B{
	private int numc=30;

	@Override
	void showB() {
		System.out.println(this.numb);
	}

	@Override
	public void showA() {
		System.out.println(this.numa);
	}
	
	public void showC() {
		System.out.println(this.numc);
	}
	
}

第二题

知识点:抽象类
案例:
1 、声明抽象父类 Person ,包含抽象方法 public abstract void pee();
2 、声明子类 Woman ,重写抽象方法,打印坐着尿
3 、声明子类 Man ,重写抽象方法,打印站着上尿
4 、声明测试类 Test10 ,创建 Person 数组,存放 Woman Man 对象,并遍历数组,调用 pee() 方法
import java.util.Random;

public class Test2 {
	public static void main(String[] args) {
		Random r = new Random();
		Person[] ps = new Person[10];
		for (int i = 0; i < ps.length; i++) {
			boolean res = r.nextBoolean();
			if (res) {
				ps[i]=new Man();
			} else {
				ps[i]=new Woman();
			}
		}
		for(Person p:ps) {
			p.pee();
		}
	}
}

abstract class Person {
	abstract void pee();
}

class Woman extends Person {
	@Override
	public void pee() {
		System.out.println("坐着尿");
	}

}

class Man extends Person {
	@Override
	void pee() {
		System.out.println("站着尿");
	}
}

第三题

知识点:抽象类
案例:
1 、声明抽象父类 Person ,包含抽象方法 public abstract void eat();
2 、声明子类中国人 Chinese ,重写抽象方法,打印用筷子吃饭
3 、声明子类美国人 American ,重写抽象方法,打印用刀叉吃饭
4 、声明子类印度人 Indian ,重写抽象方法,打印用手抓饭
5 、声明测试类 Test11 ,创建 Person 数组,存储各国人对象,并遍历数组,调用 eat() 方法
import java.util.Random;

public class Test3 {
	public static void main(String[] args) {
		Person3[] ps = new Person3[15];
		Random r = new Random();
		for (int i = 0; i < ps.length; i++) {
			Person3 tmp = null;
			switch (r.nextInt(3)) {
			case 1:
				tmp = new Chinese();
				break;
			case 2:
				tmp = new American();
				break;
			default:
				tmp = new Indian();
			}
			ps[i] = tmp;
		}
		for(Person3 p:ps)
			p.eat();
	}
}

abstract class Person3 {
	public abstract void eat();
}

class Chinese extends Person3 {
	public void eat() {
		System.out.println("用筷子吃饭");
	}
}

class American extends Person3 {
	public void eat() {
		System.out.println("用刀叉吃饭");
	}
}

class Indian extends Person3 {
	public void eat() {
		System.out.println("用手抓饭");
	}
}

第四题

知识点: Object 类的方法
案例:
1 、声明三角形类,包含 a,b,c 三边
1 )属性私有化,提供无参,有参构造,提供 get/set
2 )重写: toString()
3 )重写: hashCode equals 方法
4 )编写 public double getArea() :求面积方法
5 )编写 public double getPiremeter() :求周长方法
2 、声明测试类 Test12 ,在测试类中创建两个三角形对象,调用以上方法进行测试
import java.util.Objects;

public class Test4 {
	public static void main(String[] args) {
		Triangle t = new Triangle(3, 4, 5);
		System.out.println(t.getArea());
	}
}

class Triangle {
	private int a, b, c;

	public Triangle() {
		this.a = 3;
		this.b = 4;
		this.c = 5;
		// this(3,4,5)
	}

	public Triangle(int a, int b, int c) {
		this();
		if (a + b > c && a + c > b && b + c > a) {
			this.a = a;
			this.b = b;
			this.c = c;
		}
	}

	double p = (a + b + c) / 2.;

	// 求面积方法
	public double getArea() {
		System.out.println(p);
		System.out.println(a+"\t"+b+"\t"+c);
		// 海伦公式
		return Math.sqrt(p * (p - a) * (p - b) * (p - c));
	}
//==============================

	public int getA() {
		return a;
	}

	@Override
	public int hashCode() {
		return Objects.hash(a, b, c);
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		// student对象 instanceof Person
		if (getClass() != obj.getClass())
			return false;
		Triangle other = (Triangle) obj;
		return a == other.a && b == other.b && c == other.c;
	}

	@Override
	public String toString() {
		return "Triangle [a=" + a + ", b=" + b + ", c=" + c + "]";
	}

	public void setA(int a) {
		this.a = a;
	}

	public int getB() {
		return b;
	}

	public void setB(int b) {
		this.b = b;
	}

	public int getC() {
		return c;
	}

	public void setC(int c) {
		this.c = c;
	}

}

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值