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


目录
相关文章
|
7天前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
24 2
|
1月前
|
Java 数据处理 开发者
【Java基础面试十二】、说一说你对面向对象的理解
这篇文章阐述了面向对象是一种以类和对象为基础,通过封装、继承和多态等概念来模拟现实世界中的事物及其相互关系的程序设计方法,它强调以事物为中心进行思考和系统构造,与结构化程序设计相比,更符合人类的自然思维方式。
【Java基础面试十二】、说一说你对面向对象的理解
|
1月前
|
Java
【Java基础面试十三】、面向对象的三大特征是什么?
这篇文章介绍了面向对象程序设计的三大基本特征:封装、继承和多态,其中封装隐藏对象实现细节,继承实现软件复用,多态允许子类对象表现出不同的行为特征。
【Java基础面试十三】、面向对象的三大特征是什么?
|
3天前
|
Java 开发者
Java编程之旅:探索面向对象的力量
【9月更文挑战第16天】在编程的世界中,Java以其强大的面向对象编程特性而闻名。本文将带你走进Java的世界,一起探索类与对象的奥秘,学习如何通过封装、继承和多态性构建健壮的软件系统。无论你是初学者还是有经验的开发者,本文都旨在提供实用的代码示例,帮助你提升Java技能。准备好开始这段旅程了吗?让我们启程吧!
|
27天前
|
Java 开发者 C++
|
30天前
|
存储 Java
Java面向对象面试题总结(上)
在Java中,重写(Override)与重载(Overload)是两个重要的概念,关联到方法的定义与调用。重写是指子类对继承自父类的方法进行新的实现,以便提供子类特有的行为,其关键在于方法签名一致但方法体不同。重载则允许在同一个类中定义多个同名方法,只要参数列表不同即可,以此提供方法调用的灵活性。重写关注多态性,而重载强调编译时多态。
20 1
|
1月前
|
Java 数据安全/隐私保护
09 Java面向对象三大特征(概述)
09 Java面向对象三大特征(概述)
51 4
|
20天前
|
存储 Java 数据库连接
Java编程之旅:从基础到高级,探索面向对象的力量
【8月更文挑战第31天】本文是一篇深入浅出的Java编程指南,旨在通过生动的例子和实际代码演示,带领读者从Java的基础语法起步,逐步深入到面向对象的核心概念,最后探讨如何在实际项目中应用这些知识。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和实用的技巧。
|
30天前
|
Java 数据安全/隐私保护
【Java 第五篇章】面向对象
封装隐藏对象内部细节,仅暴露出必要的接口,提升代码的安全性和可维护性。通过private修饰属性并提供公有的getter和setter方法实现。权限修饰符从private到public控制着访问范围,从类内到整个项目。封装可用于类及其内部结构。
14 0
|
1月前
|
存储 SQL 搜索推荐
一天十道Java面试题----第一天(面向对象-------》ArrayList和LinkedList)
这篇文章是关于Java面试的笔记,涵盖了面向对象、JDK/JRE/JVM的区别、`==`和`equals`、`final`关键字、`String`、`StringBuffer`和`StringBuilder`的区别、重载与重写、接口与抽象类、`List`与`Set`、`hashcode`与`equals`以及`ArrayList`和`LinkedList`的对比等十个主题。