面向对象(中)

本文介绍了Java编程中的类、对象、继承等基础知识,包括子类如何重写父类方法、equals与toString的区别、封装类的作用以及循环结构的退出条件。示例代码展示了如何在子类中覆盖或重载方法,以及如何使用instanceof关键字进行类型检查。此外,还讨论了如何查找1000以内的完数,并对比了break和continue在循环控制中的应用。
摘要由CSDN通过智能技术生成

写出错误答案错误的原因

class Demo{

int show(int a,int b){return 0;}

}

下面那些函数可以存在于Demo的子类中。       

A.public int show(int a,int b){return 0;}//可以,覆盖。     

B.private int show(int a,int b){return 0;}//不可以,权限不够。

C.private int show(int a,long b){return 0;}//可以,和父类不是一个函数。没有覆盖,相当于重载。

D.public short show(int a,int b){return 0;}//不可以,因为该函数不可以和给定函数出现在同一类中,或者子父类中。

E.static int show(int a,int b){return 0;}//不可以,静态只能覆盖静态。

写出程序结果

class Super {

    public int get() {

       return 4;

    }

}

class Demo15 extends Super {

    public long get() {

       return 5;

    }

    public static void main(String[] args) {

       Super s = new Demo15();

       System.out.println(s.get());

    }

}

编译失败,因为子类父类中的get方法没有覆盖。但是子类调用时候不能明确返回的值是什么类型。

所以这样的函数不可以存在子父类中。

按要求实现下列问题:实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty和Staff。具体要求如下:

  1. Person类中的属性有:姓名name(String类型),地址address(String类型),

电话号码telphone(String类型)和电子邮件地址email(String类型);

  1. Employee类中的属性有:办公室office(String类型),工资wage(double

类型),受雇日期hiredate(String类型);

  1. Faculty类中的属性有:学位degree(String类型),级别level(String类型);
  2. Staff类中的属性有:职务称号duty(String类型)。
  3. 现有对象Person p1 =new Faculty()和Person p2 =new Staff (),请分别为p1的属性赋值“本科”和Staff类的duty赋值“职员”

答:

class Person{
    String
name;
   
String address;
   
String telphone;
   
String email;
}

class Employee extends Person{
    String
office;
    double
wage;
   
String hiredate;
}

class Faculty extends Employee{
    String
degree;
   
String level;
}

class Staff extends Employee{
    String
duty;
}

Person p1 = new Faculty();

Person p2 = new Staff();



//向下转型

if(p1 instanceof Faculty){

    Faculty f1 = (Faculty)p1;

    f1.degree = "本科";

}

if(p2 instanceof Staff){

    Staff s1 = (Staff)p2;

    s1.duty = "职员";

}

Object类的使用说明

我比较两个String总是false,但是它们明明都是"abc" !

答:比较String一定要使用equals或equalsIgnoreCase方法,不要使用 == 

  ==比较的是两个引用(变量)是否指向了同一个对象,而不是比较其内容。

为什么要重写toString()方法?

toString()方法在Object类中定义,其返回值是String类型,返回类名和它 的引用地址。

重写是介绍当前对象的属性

为什么要重写equals()方法?

答:

因为equals只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。

重写:当自定义使用equals()时,可以重写。用于比较两个对象的“内容”是否都 相等

定义一个person类,属性如下:

(1)身份证号,性别,姓名,年龄,户籍,出生日期(Data类型,需要引用java.uitl.Data)功能:

(2)自我介绍:介绍格式:(toString)

身份证号+姓名+户籍

(3)提供对象比较equals方法,只要身份证号+姓名相同就认为对象相等

答:

class Person{

    public Person(String idNumber, String name, String koseki) {

        this.idNumber = idNumber;

        this.name = name;

        this.koseki = koseki;

    }



    String idNumber;

    String name;

    int age;

    String koseki;

    Date dateOfBirth;



    @Override

    public String toString() {

        return "Person{" +

                "koseki='" + koseki + '\'' +

                '}';

    }



    public boolean equals(Object o){

        if(this == o){

            return true;

        }

        if(o instanceof Person){

            Person p = (Person)o;

            return this.idNumber == p.idNumber && this.name == p.name;

        }

        return false;

    }

}

写出“==”和equals的区别

答:

1.==即可以比较基本数据类型,也可以比较引用数据类型,对于基本数据类型比较的是具体的值,对于引用数据类型,比较的是地址值

2.equals是java.lang.Object类里面的方法,该方法没有被重写的情况下也是==,我们看到String等类都是对equals方法重写的

3.通常情况下,重写equals方法都是比较具体的属性是否想等。

请写出java基本数据类型及对应的封装类型,并说明封装类的作用。

答:

Byte Short Integer Long Float Double Boolean Character

包装类的作用就是将基本数据类型转换成引用类型(装箱),将引用类型数据转换成基本数据类型(拆箱)。

以下代码的运行结果是:

    public static void main(String[] args) {

         Integer i1 = 128;

         Integer i2 = 128;

         int i3 = 128;

         int i4 = 128;

         System.out.println(i1 == i2);

         System.out.println(i3 == i4);

         System.out.println(i1 == i3);

    }

答案:

false

true

true

Integeri1i2是对象,他们==比较的是地址。如果-128~127范围,那么使用缓存的常量对象,如果超过这个范围,是新new的对象,不是常量对象

每日一练

1. 循环结构是如何最后退出循环的,有哪些不同的情况请说明。

1循环条件部分为boolean类型表达式,当值为fals,退出循环。

2注意不要忘记声明迭代部分,否则,循环将不能结束,变成死循环

2.指出如下程序输出的结果:

label: for (int i = 1; i <= 4; i++) {

           for (int j = 1; j <= 10; j++) {

              if (j % 4 == 0) {

                  continue label;

              }

              System.out.print(j);

           }

           System.out.println();

}

正确结果:1231231231230

3.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3。编程 找出1000以内的所有完数。(因子:除去这个数本身的其它约数)

for(int i = 1;i <= 1000;i++){
   
int sum = 0;
    for
(int j = 1;j < i;j++){
       
if(i%j == 0){
            sum+=j
;
       
}
    }
   
if(sum == i){
        System.
out.println(sum);
       
sum = 0;
   
}
}

4. 说明break和continue使用上的相同点和不同点

break语句用于终止某个语句块的执行

continue只能使用在循环结构中

continue语句用于跳过其所在循环语句块的一次执行,继续下一次循环

continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环

5. 从控制台输出如下结构:

******

*****

****     

***

**  

*    

int size = 6;

int start = size;

int end = 1;

for(int i = 0;i < 6;i++){

    for(int j = size;j>=1;j--){

        if(j <= start && j>= end){

            System.out.print("*");

        }else {

            System.out.print(" ");

        }

    }

    end++;

    System.out.println();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值