继承小结

继承

继承必须以封装为基础, 实现继承就是为了代码的重用,继承充分展现了代码的可复用性 因为现实世界有很多的继承关系,所以把现实世界的物或事 转换到计算机中,就需要java的继承,同时增加类和类的关系 此关系很单一,就是继承关系
  • 所有的非Object类都有父类,如果没有写extends关键字, 实际上默认继承了Object顶级父类
  • java的根类是Object类

继承中的几个容易混淆的概念:
子类能够继承长辈的非私有的东西(属性和方法)
子类不是拥有长辈的东西,只是子类对长辈的东西有访问性
类里的东西就是本类自己的

有了继承之后,同样要考虑数据的存储问题,对象的数据该如何存取
在子类中利用继承的可访问性调用长辈的方法,用长辈的自己的方法
操作长辈类自己对象中的私有属性

super关键字:

super(参数列表)
参数列表,是可以是0个也可以是多个
调用父类构造,且super(参数列表)只能写在子类构造的第一条语句
super()调用的是父类无参构造,如果不写,系统会自动给添加上

super. 用来调用父类的方法或属性. 前提,父类是否允许子类调用

结论:
做继承是为复用长辈中的的内容(属性和方法),
即,就在子类中使用长辈中的内容(属性和方法)
所以继承优点:可以使用长辈中的内容
缺点:增加了类和类的复杂关系
如果继承的层次越多,子类中
可访问的内容就越来越多
但是,子类并不都需要

在开发中少用继承,多用组合

  • 什么时候用继承?
    -继承的层次不要太多
    -要使用多态的时候必须是以继承做为前提的

  • 什么时候使用组合?
    -想要获取别的类中的方法和属性的时候可以组合
    -现用,现组合

  • 组合的方式有两种

    1. 方式一:
      在类中放置属性/组合属性
      public class xx{
      //组合另一个Test类的对象
      private Test test;
      public void method(){
      //在此方法中可以使用或操作test对象中的数据
      }
      }
    2. 方式二:
      在类的方法中组合数据
      public class yy{
      public void method(Test test){
      //在此方法中使用或操作test对象中的数据
      }
      }

组合是 has a的关系 has a 有一个
上面的方式一:xx类有一个 test对象
方式二:yy类中的method方法有一个test对象
继承是 is a的关系 is a 是一个
Student is a CommonPerson 学生是一个普通人
Teacher is a CommonPerson 老师是一个普通人

想要获取别的类中的数据
1.用继承
2.用组合

继承中的重写

跨类且继承,子类重写父类的方法
方法重写的若干要求

  1. 子类重写的方法的权限修饰符必须大于等于父类
  2. 子类中重写的方法的返回值类型必须小于等于父类
  3. 如果父类中的方法的返回值是基本数据类型或void
    那么子类在重写方法的时候,返回类型必须一致
  4. 如果父类的返回类型是最终类(final),那么子类
    在重写方法的时候,返回类型必须一致

一般情况下,只要父类中要重写的方法的声明跟子类方法的声明
一样即可

重写和重载的区别:
  • 重载:
    在类内,相同的方法的名称,但参数的个数和类型不相同
  • 重写:
    跨类且继承,子类把长辈的方法体覆盖

访问修饰符!!!

								本类中	 子类中	      同包类中	其他类中
   public:						  √			√			 √		   √
   protected:					  √			√			 √
   默认/friendly/default: 		  √  			   		 √
   private:						  √ 

继承中的一个经典的应用就是equals方法

equals跟==的区别:
  • ==是一个判断相等的运算符
    这个运算符的两边如果是基本数据类型,判断的是基本数据类型
    的值是否相等
    比如:
    int i=3;
    int j=3
    System.out.println(i==j) ; //true

    这个运算符的两边如果是某个类类型的对象,判断的是两个
    对象是否是同一个地址,
    如果地址相同,那么内容就一定相同
    如果地址不相同,内容就不一定相同

  • equals方法不能判断基本数据类型的数据,只能判断对象是否相等
    如果没有重写equals方法,那么equals方法判断的是地址
    因为这个equals方法是继承自Object的equals方法,Object
    类中的equals方法判断的是地址
    如果某个类重写了equals方法,那么就看equals方法中实现的
    判断是什么,一般情况下判读单的是equals两端对象的内容.
    在java的类库中象String,封装类(Integer,Float,Double…)
    中的equals判断的就是内容是否相等.

instanceof 运算符:
instanceof运算符左边是一个对象, instanceof运算符右边是一个 类
判断instanceof左边的对象是否是右边类类型的对象 instanceof运算符的返回值是boolean
比如:
Student stu=new Student();
System.out.println(stu instanceof Student);//true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值