Java 面向对象 习题(高级篇)

简介: 1、设计类Company:获取类信息2、编写Graph类3、建立一个人类(Person)和学生类(Student)4、定义员工类5、使用面向对象的概念表示出下面的生活场景

1、设计类Company:获取类信息


题目:定义一个ClassName接口,接口中只有一个抽象方法getClassName();设计一个类Company,该类实现接口ClassName中的方法getClassName(),功能是获取该类的类名称;编写应用程序使用Company类。


🔷代码如下:


interface ClassName{
    String getClassName();
}
class Company implements ClassName{
    public String getClassName(){
        return "Company";
    }
}
public class Demo1 {
    public static void main(String[] args){
        Company company=new Company();
        System.out.println("该类的类名称:"+company.getClassName());
    }
}


🔷运行结果:


该类的类名称:Company


2、编写Graph类


题目:考虑一个表示图形的类,写出类中的属性及方法。


🔷代码如下:


abstract class Graph{
    public abstract float area();
}
class Triangle extends Graph{
    private float length,wide;
    public Triangle(float length,float wide){
        this.setLength(length);
        this.setWide(wide);
    }
    public void setLength(float length){
        this.length=length;
    }
    public void setWide(float wide){
        this.wide=wide;
    }
    public float getLength() {
        return length;
    }
    public float getWide(){
        return wide;
    }
    public float area(){
        return getLength()*getWide()/2;
    }
}
public class Demo2 {
    public static void main(String[] args){
        Triangle triangle=new Triangle(30,23);
        System.out.println("面积为:"+triangle.area());
    }
}


🔷运行结果:


面积为:345.0


3、建立一个人类(Person)和学生类(Student)


题目:功能要求如下:

(1) person中包含4个保护型的数据成员name、addr、sex、age,分别为字符串型、字符串型、字符型及整型,表示姓名、地址、性别和年龄。用一个4参构造方法、一个两参构造方法、一个无参构造方法、一个输出方法显示4种属性。

(2)Student类继承person类,并增加输出成员math、english存放数学和英语成绩。用一个6参构造方法、一个两参构造方法、一个无参构造方法和重写输出方法用于显示6 种属性。


🔷代码如下:


class Person{
    protected String name,addr;
    protected char sex;
    protected int age;
    public Person(){}
    public Person(String name,char sex){
        this.name=name;
        this.sex=sex;
    }
    public Person(String name,String addr,char sex,int age){
        this.name=name;
        this.sex=sex;
        this.addr=addr;
        this.age=age;
    }
    public void print(){
        System.out.println("姓名:"+this.name+" ,性别:"+this.sex+" ,年龄:"+this.age+" ,地址:"+this.addr);
    }
}
class Student extends Person{
    private int math,english;
    public Student(){}
    public Student(String name,char sex){
        super(name,sex);
    }
    public Student(String name,String addr,char sex,int age,int math,int english){
        super(name,addr,sex,age);
        this.math=math;
        this.english=english;
    }
    public void print(){
        System.out.println("姓名:"+this.name+" ,性别:"+this.sex+" ,年龄:"+this.age+" ,地址:"+this.addr+" ,数学成绩:"+this.math+" ,英语成绩:"+this.english);
    }
}
public class Demo3 {
    public static void main(String[] args){
        Student stu1=new Student();
        Student stu2=new Student("张三",'男');
        Student stu3=new Student("李四","XXX",'男',20,98,88);
        stu1.print();
        stu2.print();
        stu3.print();
    }
}


🔷运行结果:


姓名:null ,性别: ,年龄:0 ,地址:null ,数学成绩:0 ,英语成绩:0
姓名:张三 ,性别:男 ,年龄:0 ,地址:null ,数学成绩:0 ,英语成绩:0
姓名:李四 ,性别:男 ,年龄:20 ,地址:XXX ,数学成绩:98 ,英语成绩:88


4、定义员工类


题目:定义员工类,具有姓名、年龄、性别属性,并具有构造方法和显示数据方法。

定义管理层类,继承员工类,并有自己的属性职务和年薪。

定义职员类,继承员工类,并有自己的属性所属部门和月薪。


🔷代码如下:


class Employees{
    private String name;
    private int age;
    private char sex;
    public Employees(){}
    public Employees(String name,int age,char sex){
        this.setName(name);
        this.setAge(age);
        this.setSex(sex);
    }
    public void setName(String name){
        this.name=name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public void setSex(char sex){
        this.sex=sex;
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public char getSex(){
        return sex;
    }
    public String toString(){
        return "name="+getName()+",age="+getAge()+",sex="+getSex();
    }
}
class Management extends Employees{
    private String job;
    private float yearSalary;
    public Management(String name,int age,char sex,String job,float yearSalary){
        super(name,age,sex);
        this.setJob(job);
        this.setYearSalary(yearSalary);
    }
    public void setJob(String job){
        this.job=job;
    }
    public void setYearSalary(float yearSalary){
        this.yearSalary=yearSalary;
    }
    public String getJob(){
        return job;
    }
    public float getYearSalary(){
        return yearSalary;
    }
    public String toString() {
        return "name="+getName()+",age="+getAge()+",sex="+getSex()+",job="+getJob()+",yearSalary="+getYearSalary();
    }
}
class Staff extends Employees{
    private String department;
    private float monthSalary;
    public Staff (String name,int age,char sex,String department,float monthSalary){
        super(name,age,sex);
        this.setDepartment(department);
        this.setMonthSalary(monthSalary);
    }
    public void setDepartment(String department){
        this.department=department;
    }
    public void setMonthSalary(float monthSalary){
        this.monthSalary=monthSalary;
    }
    public String getDepartment(){
        return department;
    }
    public float getMonthSalary(){
        return monthSalary;
    }
    public String toString() {
        return "name=" + getName() + ",age=" + getAge() + ",sex=" + getSex()+",department="+getDepartment()+",monthSalary="+getMonthSalary();
    }
}
public class Demo4 {
    public static void main(String[] args) {
        Management management=new Management("张三",40,'男',"经理",200000.0f);
        Staff staff=new Staff("李华",28,'男',"宣传",4000.0f);
        System.out.println(management.toString());
        System.out.println(staff.toString());
    }
}


🔷运行结果:


name=张三,age=40,sex=男,job=经理,yearSalary=200000.0
name=李华,age=28,sex=男,department=宣传,monthSalary=4000.0


5、使用面向对象的概念表示出下面的生活场景


场景:小明去超市买东西,所有买到的东西都放在了购物车之中,最后到收银台一起结账。


分析:

(1)购物车放置商品,有生活用品、食物、文具等;

(2)商品属性应该具有商品名、价格、数量、生产日期等;


(3)设置一个接口存储每一个商品类都可以用到的函数;

(4)将收银台的结账功能放置到购物车类中。


🔷代码如下:


interface Goods
{
    public String getName();//取得产品名
    public String getProduction();//取得生产日期
    public double getPrice();//取得产品价格
    public int getNumber();//取得数量
    public void print();//打印信息
}
class Daily implements Goods
{
    private String production;
    private String name;
    private double price;
    private int number;
    public Daily(String production,String name,double price,int number)
    {
        this.production=production;
        this.name=name;
        this.price=price;
        this.number=number;
    }
    public String getName()//取得产品名
    {
        return this.name;
    }
    public String getProduction()//取得生产日期
    {
        return this.production;
    }
    public double getPrice()//取得产品价格
    {
        return this.price;
    }
    public int getNumber()
    {
        return this.number;
    }
    public void print()//打印信息
    {
        System.out.println("产品名:"+this.getName()+'\n'+"生产日期:"+this.getProduction()+'\n'+"价格:"+this.getPrice()+'\n'+"数量:"+this.getNumber()+'\n');
    }
}
class Food implements Goods
{
    private String production;
    private String name;
    private double price;
    private int number;
    public Food(String production,String name,double price,int number)
    {
        this.production=production;
        this.name=name;
        this.price=price;
        this.number=number;
    }
    public String getName()//取得产品名
    {
        return this.name;
    }
    public String getProduction()//取得生产日期
    {
        return this.production;
    }
    public double getPrice()//取得产品价格
    {
        return this.price;
    }
    public int getNumber()
    {
        return this.number;
    }
    public void print()//打印信息
    {
        System.out.println("产品名:"+this.getName()+'\n'+"生产日期:"+this.getProduction()+'\n'+"价格:"+this.getPrice()+'\n'+"数量:"+this.getNumber()+'\n');
    }
}
class Stationary implements Goods//定义文具类
{
    private String production;
    private String name;
    private double price;
    private int number;
    public Stationary(String production,String name,double price,int number)
    {
        this.production=production;
        this.name=name;
        this.price=price;
        this.number=number;
    }
    public String getName()//取得产品名
    {
        return this.name;
    }
    public String getProduction()//取得生产日期
    {
        return this.production;
    }
    public double getPrice()//取得产品价格
    {
        return this.price;
    }
    public int getNumber()
    {
        return this.number;
    }
    public void print()//打印信息
    {
        System.out.println("产品名:"+this.getName()+'\n'+"生产日期:"+this.getProduction()+'\n'+"价格:"+this.getPrice()+'\n'+"数量:"+this.getNumber()+'\n');
    }
}
class ShopCar
{
    private Goods[] goods;//使用接口接收对象
    private int foot;//数据的保存位置
    public ShopCar(int len)
    {
        if(len>0)
            this.goods=new Goods[len];
        else
            this.goods=new Goods[1];
    }
    public boolean add(Goods g)
    {
        if(this.foot<this.goods.length)//自己的对象可以直接调用私有数据成员
        {
            this.goods[foot]=g;
            this.foot++;
            return true;
        }
        else
            return false;
    }
    public void search(String keyword)
    {
        for(int i=0;i<this.goods.length;i++)
        {
            if(this.goods[i]==null)
                System.out.println("你没有买任何东西");
            if(this.goods[i].getName().equals(keyword))//不可以直接引用name
            {
                this.goods[i].print();
            }
        }
    }
    public double bill()
    {
        double sum = 0;
        for(int i=0;i<this.goods.length;i++)
        {
            if(this.goods[i]!=null)
            {
                sum+=this.goods[i].getPrice()*this.goods[i].getNumber();
            }
        }
        return sum;
    }
}
public class Demo5 {
    public static void main(String[] args) {
        ShopCar sc=new ShopCar(5);
        sc.add(new Food("火腿肠","2020.10.23",2.00,12));
        System.out.println(sc.bill());
    }
}

🔷运行结果:


24.0


目录
相关文章
|
6天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
8 2
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
26天前
|
Java 数据安全/隐私保护
JAVA经典习题详解
JAVA经典习题详解
16 4
|
2月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
32 4
|
2月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
24天前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
13 0
|
26天前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
30 0
|
2月前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
53 2
|
2月前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。
|
2月前
|
Java 开发者
Java编程之旅:探索面向对象的力量
【9月更文挑战第16天】在编程的世界中,Java以其强大的面向对象编程特性而闻名。本文将带你走进Java的世界,一起探索类与对象的奥秘,学习如何通过封装、继承和多态性构建健壮的软件系统。无论你是初学者还是有经验的开发者,本文都旨在提供实用的代码示例,帮助你提升Java技能。准备好开始这段旅程了吗?让我们启程吧!