java基础知识总结之继承,多态,抽象和接口

继承中的问题

  • 用extends关键字实现继承
  • 在子类只能继承父类中的非私有方法。
  • final修饰的类不能被继承。
  • 子类不能继承父类的构造方法,但是默认在子类中会调用父类的无参构造方法,即子类的构造方法中第一句默认为super()。
  • java只能单继承,就是每个类只能继承一个类,但java支持多层继承,及子类的父类还可以继承一个类。(java中Object类是java的根类,是所有类的父类)
//单继承和多层继承
class grandfather{
}

class father extends grsndfather{
}

class son extends father{
}
  • 子类不能重写父类中的私有方法。
  • 子类重写父类的方法时,方法的访问权限不能比父类中的低。

注意:

  • 我们没有在类中写构造方法时,系统会默认添加无参构造方法。如果我们在类中添加了有参构造方法,那么也要重写无参构造方法,因为我们一旦自己写了构造方法,系统就不会再默认添加无参构造。
  • 当父类中不存在无参构造方法时,调用子类的构造方法就会出错。解决办法:1,在父类中添加无参构造。2,在子类构造方法第一句用super显示调用父类带参构造。(保证在完成子类初始化之前先完成父类的初始化)
  • this关键字和super关键字
    this关键字代表所在类的对象引用,方法被哪个对象调用,this就代表那个对象
    super代表父类存储空间的标识。(可以理解为父类的引用)
  • 什么时候使用继承呢?
    符合is-a的关系情况下可以使用继承来提高代码的复用性。例如:猫和动物,狗和动物这种关系,因为我们完全可以说猫是一种动物,狗是一种动物。这样父类中定义一些通用的方法,子类继承父类,就可以直接重写这些方法实现自己的功能,而不需要再自己定义这些方法。

多态中的问题

  • 多态(同一事物在不同时刻的不同状态)
  • 多态的前提:1.有继承关系,2.有方法重写,3.有父类引用指向子类对象 (向上转型)
//向上转型
class F{
	void show(){...};
}
class Z extends F{
	void show(){...};//子类冲重写父类的show方法
	void call(){...}
}

F f=new Z();//父类的引用指向子类对象

/*多态访问中成员的特点:
成员变量:编译看左边,运行看左边
成员方法:编译看左边,运行看右边
静态方法:编译看左边,运行看右边
*/
  • 多态的好处:程序扩展性好。
    多态的弊端:父类不能使用子类特有的功能
    解决办法:向下转型(即将父类的引用赋给子类的对象)
F f =new F();
Z z=(Z) f;//进行类型的强制转换(向下转型)
z.show();
z.call();//子类的方法也可以调用
//此时z可以调用子类的方法。

抽象中的问题

  • 用关键字abstract修饰
  • 抽象类中可以没有抽象方法
  • 有抽象方法的类一定是抽象类
  • 抽象类有构造方法。但不能实例化
  • 抽象类中的方法只需要给出方法声明,而不需要实现

注意

  • 子类问题:子类还是抽象类时,也只需要声明方法即可。子类不是抽象类时:需要实现父类中所有的抽象方法。
  • 父类成员方法为抽象方法时,是强制子类必须实现的方法。
  • abstract不能同以下关键字共存:和private冲突(子类必须实现父类中抽象方法,声明为private,子类就无法继承),和final冲突(final修饰就不可以修改,而子类需要重写抽象方法,得到具体实现。)和static用 无意义(static修饰的成员属于类成员,也就是说被static修饰的是与类关联的,子类是无法拥有的)

接口中的问题

  • 使用interface关键字修饰
  • 使用implements关键字实现
interface B{
}//接口
class A{
}//类
class A implements B{
}//A类实现B类,需要实现接口B中的方法。
  • 接口中成员的特点:
    成员变量,默认修饰符 public static final 静态的常量
    构造方法:没有构造方法
    成员方法:默认public abstract 抽象的方法,因为我们在接口中也只是对方法进行声明,而不具体实现,具体的实现都交给实现此接口的类来完成。
  • 接口继承了object类。

注意

  • 类与类之间的关系:继承(单继承和多层继承)
  • 类与接口之间的关系:类实现接口(一个类可以实现多个接口)
//多个接口之间用,分开
class A implements B,C,D...{
}//B,C,D都是接口
  • 接口与接口之间的关系:多继承(一个接口可以继承多个接口)
  • 接口与抽象类的区别:
    成员区别1,成员变量:抽象类的成员变量可以是变量,也可以是常量,而接接口的成员变量只能是常量。 2,构造方法: 抽象类有构造方法(但是不能实例化),接口没有构造方法。 3,成员方法: 抽象类中可以抽象和非抽象方法,接口中只能是抽象方法。
    设计理念: 通常我们使用抽象类完成is-a的关系,即继承,我们将一类事物的最基本的功能抽象出来,设计在一个基本的父类中,将这些方法定义为抽象的,要求属于这一类的事物必须完成或者实现这些功能。【例如:手机这类事物最基本的功能有电话服务和短信服务,所以我们要求所有的手机都要完成这两个最基本的功能。】
    而接口通常来完成like-a的关系,作为扩展,当某个类需要完成一些特有功能,我们只需要实现有这些特有功能的接口。【例如:手机需要扩展音乐的功能,打游戏,视频等等功能,我们就实现这些接口来扩展它的功能。】

(个人学习总结,仅供参考,有误请指正,谢谢)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值