继承,转型

 

 

Father类

复制代码
package juxing;

public class Father {
    
    
    private String name;
    
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
     
    //默认构造方法
//    public Father()
//    {
//        System.out.println("父类的构造方法");
//    }
    public Father(String name)
    {
        System.out.println("父类的有参构造方法");
        
        this.name=name;
    }
    
    
    public void work()
    {
        System.out.println("我劳动我光荣");
    }
    

}
View Code
复制代码

 

 

 

Son类

复制代码
package juxing;

public class Son extends Father {
//一个子类智能继承一个父类。单继承
    
    //子类可以扩展父类,自动具有父类的成员
    public Son()
    {
        //不能在前边加代码,必须先有父类。
        super("儿子");
        System.out.println("子类的构造方法");
    }
    public void sing()
    {
        System.out.println("爱唱歌");
    }
    
    
    //子类覆盖,重写。名字一样,参数一致。否则只是扩展
    public void work()
    {
        //不全覆盖,调用父类的work
        //super.work();
        //System.out.println("我不想去上班,我要参加海选");
        System.out.println("边上班边唱歌");
    }
    public static Object getDate(int i)//Object,所有类的父类,都向上转
    {
        Object rtn=null;
        //获取数据
        if(i==1)
        {
            //1,father
            Father f=new Father("向上转型的父类");
            //向上转
            rtn=f;
        }
        else
        {
            //2,Son
            Son s=new Son();
            rtn=s;
        }
        return  rtn;
        
    }
}
View Code
复制代码

 

 

Testjicheng类

复制代码
package juxing;

public class TestJiCheng {

    public static void main(String[] args) 
    {

        Father f=new Father("父亲");
        //f.setName("父亲");
        
        f.setAge(50);
        f.work();
        System.out.println();
        
        
        Son s=new Son();
        
        //s.setName("儿子");
        
        s.setAge(20);
        
        System.out.println("儿子"+s.getAge()+"岁");
        System.out.println();
        s.work();
        
        s.sing();
        
        System.out.println();
        System.out.println();
        //转型
        //向上转型,子类到父类
        
        Father f1=new Son();
        System.out.println("名字"+s.getName());
        f1.work();//调用子类的work
        
        System.out.println();
        System.out.println("向下转型,父类转子类");
        //向下转型,父类转子类
        //Son s1=(Son) new Father("父亲");子类有的父类不一定有
        
        Son s1=(Son)f1;
        
        s1.work();
        System.out.println();
        
        //调用,
        System.out.println("类型不确定,用Object,先向上全部转成父类,再向下转型。");
        Father f2=(Father)Son.getDate(2);
        f2.work();
        
    }

}
View Code
复制代码

 

posted @   百事没事  阅读(192)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示