[Java入门] Java学习第二站:类的继承

情景:
假设张老师是一家培训机构的英语老师,她的学生有大学生、中学生和小学生。张老师很认真地为学生们建好了类,并且保存了姓名、年龄、住址、英语水平等不同属性和学习方法和测试方法等不同方法。而2020年北京冬奥会的申办使得人们对学英语的热情大增,张老师的学生种类增加了销售人员、设计师、工程师、运动员等等……一百多个种类!显然,为这一百多种学生建类不仅会使姓名年龄等代码显得重复冗余,张老师本身也需要对教学方法进行多次重载。怎么办才好呢?

这时候就需要用到类的继承了。类的继承就是把多个有共同点的事物中的共同点抽象出来,写成一个父类,把这些事物抽象成类去继承父类中的那些共同点。
对张老师而来,这一百多种类都是学生,她的工作就是为他们提高英语水平。我们可以把多种学生的共同点抽象出来,形成一个学生类,然后让不同的类去继承这个学生类,可以大大减少代码量,也可以通过处理父类类型,对所有子类类型进行处理。

使用类的继承的好处:
1.提高代码重用性
      将子类中的共同属性、方法放入父类中。
2.提高程序的扩展性
      可通过处理父类类型,对所有子类类型进行处理,可无限扩展子类
3.提高了代码的可维护性
      修改时只需要修改少量代码即可。
      
子类可以继承到父类所有的属性和所有的普通方法,但是不包含构造方法。子类也可以继承父类没有的属性和方法。

图1  类的继承权限

类的继承:
      关键字:extends (Java中类只能继承一个父类)
      格式:  
      public class 类名(子类、派生类、超类) extends 类名(父类、基类) {
        
    }
类的继承代码实现:
        Student {String name; study(){} }
        UNStudent extends Student { study(){} }
        GStudent extends Student {  study(){} }
        CStudent extends Student {   }
        XStudent extends Student {   }
由代码可知,各种学生类继承了Student这个类,也继承了Student父类的name属性和study()方法。其中,部分子类还对父类中的study()方法进行了重写。

方法重写
    方法重写必须满足的条件:
        1.必须要存在继承关系;
        2.子类在重写父类方法时,子类方法的访问修饰符可以大于或等于父类方法的访问修饰符;
        3.子类在重写父类方法时,子类方法的返回值数据类型,方法名,参数都必须要和父类的完全一致;
        4.子类方法中的具体实现要和父类不同。
        

图2  eclipse重写标志(绿色小三角)


既然重写后的子类方法与父类方法一致,那我们怎么知道我们调用的是哪一个方法呢?
根据new关键字后的类名来决定,如果类名是子类的,则优先调用子类的方法,如果子类没有才调用父类中的方法。


图3 方法重写后的调用

如果方法重写后调用子类的方法还需调用父类的方法,用super关键字。如果说this关键字相当于生活中的"我",则super关键字相当于"我父亲"~~~

图4 加super关键字之后

自动型转
父类的类型名可以引用一个子类的对象,用的就是自动型转。
    自动转型的格式:
        父类名  对象名  = new 子类名();
    最常见的自动转型:
    定义方法时的参数为父类对象,而实际调用方法时传参却是子类参数。
        public void 方法名(父类名  对象名){}
        方法名(子类对象);
    如上文提到的张老师的教学方法:    
        Teacher {
            String name;
            teach(Student un){un.study();    }
        }
(不同于强制类型转换。构造了一个子类类型的对象,用一个父类类型的变量引用了,那么,需要将这个对象的类型还原的时候,就可以用      子类名 子类对象=(子类)父类对象;)

 

QQ:375471598

微信:Q159837547

欢迎过来勾搭小邱同学,或者对文章提出修改意见,共同成长。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值