Java面向对象作业题

这篇博客探讨了Java面向对象编程中的类与接口关系,包括继承、实现等概念。作者通过编写代码实例展示了如何设计类和接口,以及如何在测试类中验证其功能。在问题简答部分,博客详细解释了不同类型的继承和实现关系,并给出了篮球运动员和教练的案例来说明抽象类和接口的应用。

一、编写代码

根据需求,完成如下代码(找出继承关系,分析哪些需要定义成抽象类,哪些需要定义成具体的类),并在测试类中进行测试。
要求:所有的成员变量全部私有,并提供公共的访问接口

  1.  已知学生类(Student)和老师(Teacher)类如下:
     	属性:姓名,年龄
     	行为:吃饭
     	老师有特有的方法:讲课
     	学生有特有的方法:学习
    
package org.oracle.test;

public class Student extends Person {

	public Student() {
		super();
	}

	public Student(String name, int age) {
		super(name, age);
		System.out.println(name + "今年" + age + "岁");
	}

	@Override
	public void eat() {
		System.out.println("学生吃饭");

	}

	public void play() {
		System.out.println("学生学习");
	}
}
package org.oracle.test;

public class Teacher extends Person{
	
	public Teacher() {
		super();
	}
	public Teacher(String name, int age) {
		super(name, age);
		System.out.println(name+"今年"+age+"岁");
	}
	@Override
	public void eat() {
		System.out.println("老师吃饭");
		
	}
	public void play() {
		System.out.println("老师讲课");
	}

}

package org.oracle.test;

public abstract class Person {
	private String name;
	private int age;
	
	public Person() {
		
	}
	
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public abstract void eat();
}

package org.oracle.test;

public class test2 {
	public static void main(String[] args) {
		Student s1 = new Student("小明",15);
		s1.eat();
		s1.play();
		System.out.println("=====");
		Teacher t1 = new Teacher("小李",18);
		t1.eat();
		t1.play();
	}
}

运行结果:
小明今年15岁
学生吃饭
学生学习
=====
小李今年18岁
老师吃饭
老师讲课

  1. 编写一个圆类Circle,该类拥有:  
     	A:一个成员变量  radius(私有,浮点型);  // 存放圆的半径;         
     	B:两个构造方法
     		Circle( )                       // 将半径设为0            
     		Circle(double  r )              //创建Circle对象时将半径初始化为r        
     	C:三个成员方法   
     		double getArea( )              //获取圆的面积             
     		double getPerimeter( )         //获取圆的周长              
     		void  show( )                  //将圆的半径、周长、面积输出到屏幕 
    
package org.oracle.test;

public class Circle {
	private double radius;

	public Circle() {
		radius = 0;
	}

	public Circle(double radius) {
		this.radius = radius;
	}

	public double getArea() {
		return Math.PI * radius * radius;

	}

	public double getPerimeter() {
		return 2 * Math.PI * radius;
	}

	public void show() {

		System.out.printf("半径:" + "%.2f", radius);
		System.out.printf("\n周长:" + "%.2f", getPerimeter());
		System.out.printf("\n面积:" + "%.2f", +getArea());
	}

	public static void main(String[] args) {
		Circle c = new Circle(10);
		c.show();
	}

}

运行结果
半径:10.00
周长:62.83
面积:314.16

  1. 编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有:  
     	A:一个成员变量  
     		double hight(私有,浮点型);        // 圆柱体的高;         
     	B:构造方法            
     		Cylinder (double r, double  h )    //创建Circle对象时将半径初始化为r         
     	C:成员方法              
     		double getVolume( )                //获取圆柱体的体积              
     		void  showVolume( )                //将圆柱体的体积输出到屏幕  
     	编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,
     	计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。 
    
package org.oracle.test;

public class Cylinder extends Circle {
	private double hight;

	public Cylinder() {
		super();

	}

	public Cylinder(double radius, double hight) {
		super(radius);
		this.hight = hight;
	}

	public double getVolume() {
		return getArea() * hight;

	}

	public void showVolume() {
		System.out.printf("\n体积:" + "%.2f", getVolume());
	}

	public static void main(String[] args) {
		Cylinder c = new Cylinder(10, 10);//传半径为10,高为10
		c.show();//调用继承了父类的方法
		c.showVolume();//体积:3141.59
	}

}

运行结果
半径:10.00
周长:62.83
面积:314.16
体积:3141.59

二、问题简答

  1. (面试):
    类与类:继承关系,单一继承,多层继承
    类与接口:?
    接口与接口的关系:?

类与接口:实现关系,单实现,多实现
单实现: 一个类只实现一个接口
多实现: 一个类可以同时实现多个接口并且还可以在继承一个类的同时实现多个接口。

接口与接口:继承关系,可以单继承,也可以多继承,并且可以多层继承

  1. (经典案例):
    篮球运动员和教练
    乒乓球运动员和教练
    现在篮球运动员和教练要出国访问,需要学习英语
    请根据你所学的知识,分析出来哪些是类,哪些是抽象类,哪些是接口

人是父类
教练和运动员 是抽象类,继承 人类
篮球运动员,篮球教练 和 乒乓球运动员,乒乓球教练是类
出国学习英语是接口
在这里插入图片描述

  1. 请问记录台输出什么:

在这里插入图片描述
在这里插入图片描述

控制台:
20
我是子类方法
我是父类静态方法

JAVA静态代码块会在类被加载时自动执行?(错误)

静态属性属于整个类,不属于某一个对象,所以建议使用类名修改静态属性

静态方法的特点:			
 1. 静态方法允许直接访问静态成员
 2. 静态方法不能直接访问非静态成员。因为:非静态成员变量是属于对象的,静态方法是直接通过类进行调用的,不是通过对象进行调用的,所以说静态方法内部是不能直接访问非静态成员的
 3. 静态方法中不允许使用this或是super关键字。因为:this是调用本类中的非静态属性,super也是调用父类的非静态属性
 4. 静态方法可以继承,不能重写、没有多态
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值