3 Java 第三章练习3---有参构造方法传参、继承、多态

本文通过多个示例深入探讨了Java中的多态与继承概念。包括不同类型的对象调用方法的行为、父类引用指向子类对象的情况以及抽象类和接口的应用等。

1.写出程序结果

package com.feifan.javaoop.day4;

public class Fu {
    boolean show(char a){   // 判断是否char类型
        System.out.println(a);
        return true;
    }
}

class Demo extends Fu{
    public static void main(String[] args){
        int i=0;

        Fu f=new Demo();  //父类引用指向子类方法

        Demo d=new Demo();
        for(f.show('A'); f.show('B')&&(i<2);f.show('C')) {
            i++;
            d.show('D');
        }
        // A B D C  B D C B
    }
}

package com.feifan.javaoop.day4;

public class Fu {
    boolean show(char a){
        System.out.println(a);
        return false;
    }
}

class Demo extends Fu{
    public static void main(String[] args){
        int i=0;

        Fu f=new Demo();  //父类引用指向子类方法

        Demo d=new Demo();
        for(f.show('A'); f.show('B')&&(i<2);f.show('C')) {
            i++;
            d.show('D');
        }
        // A B 
    }
}

2、写出程序结果:

package com.feifan.javaoop.day4;

    class Fu{
        int num=4;
        void show(){
            System.out.println("showFu");
        }
    }
    class Zi extends Fu{
        int num=5;
        @Override
        void show(){
            System.out.println("showZi");
        }
    }
    class T{
        public static void main(String[] args){
            Fu f=new Fu ();    
            Zi z=new Zi();      

            Fu f1 = new Zi();//父类引用指向子类对象 //showfi

            System.out.println(f.num);  //4
            System.out.println(z.num);   //5
            System.out.println(f1.num);   //4
            
            f.show();  //showfu
            z.show();  //showzi
        }
    }

2、继承 多态练习

1、定义一个人类 , 包含一个country属性,speak()方法
派生一个中国人和美国人类,
两种人说话方式语言不同

package com.feifan.javaoop.day4;

/*
1、定义一个人类 , 包含一个country属性,speak()方法
   派生一个中国人和美国人类,
   两种人说话方式语言不同
 */
public class Person {

    public String country;

    //构造方法
    public Person(){
        super();
    }

    public void Speak(){
        System.out.println("人说话");
    }

}
package com.feifan.javaoop.day4;

public class Chinese extends Person{


    //构造方法
    public Chinese(){
        super();
        super.country = "中国";

    }
    @Override
    public void Speak() {
        super.Speak();
        System.out.println("人说中文");
    }
}
package com.feifan.javaoop.day4;
//--------------------------------------------------
public class American extends Person{



    //构造方法
    public  American(){
        super();
        super.country = "美国";

    }

    @Override
    public void Speak() {
        super.Speak();
        System.out.println("人说英文");
    }
}

package com.feifan.javaoop.day4;

public class TestPerson {
    public static void main(String[] args) {

        Chinese chinese = new Chinese();    
        American american = new American();  

        System.out.println(chinese.country);  //中国
        System.out.println(american.country);  // 美国

        chinese.Speak();  //中国人说中文  子类继承重写父类方法,父类方法先会运行,然后执行子类重写的方法,子类重写的方法并不覆盖父类方法
        american.Speak();  // 美国人说英语


    }
}

2、

编写一个Person抽象类,要求含有姓名(name)年龄(age)两个私有属性以及吃饭(eat) 和睡觉(sleep)两个抽象方法,
并写出带参构造方法,创建学生(student)和工人(worker) 两个类,继承Person类,学生类多出了私有属性学号和学习方法(输出我爱学习),
工 人类多出了私有属性工号和工作方法(输出我爱工作),在主函数中创建学生和工人类 的实例对象,使用构造方法赋值,并输出所有属性和方法

package com.feifan.javaoop.day4;

public class Student extends Person1 {

    private String studentName;

    public Student(){
        super();
    }
	
 	//如果是private方法怎么访问?
    public void LearnWay(){
        System.out.println("我爱学习");
    }
    
    //重写父类方法
    @Override
    public void eat() {
        System.out.println("学生吃饭");
    }

    @Override
    public void sleep() {
        System.out.println("学生睡觉");
    }
}
package com.feifan.javaoop.day4;

import com.feifan.javaoop.day3.WindowDemo;

public class Worker extends Person1{

    private String workerNumber;

    public Worker(){
        super();
    }

    public void  workerWay(){
        System.out.println("我爱工作");
    }


    //重写父类方法
    @Override
    public void eat() {
        System.out.println("工人吃饭");
    }

    @Override
    public void sleep() {
        System.out.println("工人睡觉");
    }
}
package com.feifan.javaoop.day4;

public abstract class Person1 {

    //声明变量
    private String name;
    private int age;

    //带参构造方法
    public Person1(String name,int age) {
        super();
        setName(name);
        getName();
        setAge(age);
        getAge();
    }

    public Person1() {
        super();
    }


    //声明方法
    public abstract void eat();
    public abstract void sleep();

    //private 属性 外界访问入口
    public void setName(String name) {
        this.name = name;
        System.out.println("set方法中name:"+name);
    }
    public String getName() {
        System.out.println("get方法中name:"+name);
        return name;
    }
    public void setAge(int age) {
        this.age = age;
        System.out.println("set方法中age:"+age);
    }
    public int getAge() {
        System.out.println("get方法中age:"+age);
        return age;

    }
}
package com.feifan.javaoop.day4;

public class TestPerson1 {
    public static void main(String[] args) {

/*        Person1 person1 = new Person1("DAM","12") {
        }
        System.out.println(person1);*/


        Student student = new Student();
        Worker worker = new Worker();

        student.LearnWay();
        worker.workerWay();

        student.setName("小宋");
        student.setAge(20);
        worker.setName("小王");
        worker.setAge(12);

        System.out.println(student.getName());
        System.out.println(student.getAge());
        System.out.println(worker.getName());
        System.out.println(worker.getAge());

        student.eat();
        student.sleep();
        worker.eat();
        worker.sleep();

    }
}

在这里插入图片描述
3、

按要求编写一个Java应用程序:
(1)定义一个抽象类CanCry,描述会吼叫的方法public void cry()。
(2)分别定义狗类(Dog)和猫类(Cat),实现CanCry接口。实现方法的功能分别为:打印输出“我是狗,我的叫声是汪汪汪”、“我是猫,我的叫声是喵喵喵”。
(3)定义一个主类Test,
①定义一个void makeCry(CanCry c)方法,其中让会吼叫的动物吼叫。
②在main方法中创建狗类对象(dog)、猫类对象(cat)、Test类对象(t),用t调用makecry方法,让狗和猫吼叫。

package com.feifan.javaoop.day4.polymorphicPractice;
    /*
    多态----喂不同动物,动物吃食物
      本例——让不同动物吼,动物吼叫方法
      使用多态:
     */
public class Test {
    public static void main(String[] args) {

        CanCry dog = new Dog();
        CanCry cat = new Cat();

        Test test = new Test();
        test.makeCry(dog);
        test.makeCry(cat);

    }
    public void makeCry(CanCry canCry) {
        System.out.println("让会吼叫的动物吼叫");
        canCry.cry();

        //加判断
        if(canCry instanceof Cat) { //如果输入的canCry是Cat的实例 true
            //需要调用子类cat的特有方法 drop
            System.out.println("调用猫的特有方法drop ");
            Cat cat = (Cat) canCry;
            cat.drop();
        }

    }
/*
我是狗,我的叫声是汪汪汪
让会吼叫的动物吼叫
我是猫,我的叫声是喵喵喵
调用猫的特有方法drop 
cat drop
*/
}
public abstract class CanCry {

    public CanCry(){
        super();
    }

    public abstract void cry();
}
package com.feifan.javaoop.day4.polymorphicPractice;

public class Cat extends CanCry {

    public Cat(){
        super();
    }

    //cat特有方法
    public void drop(){
        System.out.println("cat drop");
    }

    @Override
    public void cry() {

        System.out.println("我是猫,我的叫声是喵喵喵");
    }
}
package com.feifan.javaoop.day4.polymorphicPractice;

    /*
    多态----喂不同动物,动物吃食物
         本例——打印不同动物,动物哭
     */
public class Dog extends CanCry{

    public Dog(){
        super();
    }
    @Override
    public void cry() {
        System.out.println("我是狗,我的叫声是汪汪汪");
    }
}
package com.feifan.javaoop.day4.polymorphicPractice;

    /*
    多态----喂不同动物,动物吃食物
      本例——让不同动物吼,动物吼叫方法
      未使用多态的时候:
     */
public class TestCanCry {
    public static void main(String[] args) {

        Dog dog = new Dog();
        Cat cat = new Cat();

        TestCanCry testCanCry = new TestCanCry();
        testCanCry.DogCry(dog);
        testCanCry.CatCry(cat);
    }
    public void DogCry(Dog dog){
        System.out.println("让会吼叫的动物吼叫");
        dog.cry();
    }
    public void CatCry(Cat cat){
        System.out.println("让会吼叫的动物吼叫");
        cat.cry();
    }
}
/*
让会吼叫的动物吼叫
我是狗,我的叫声是汪汪汪
让会吼叫的动物吼叫
我是猫,我的叫声是喵喵喵
*/
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码元宋大米

感谢小主大赏,留言可进互助群~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值