java基础——继承、接口、泛型

java只支持单继承,不支持多继承,但支持多层继承

1.子类的继承性

  • 子类和父类在同一包下的继承性

子类会继承父类除了private的成员变量和不是private的方法作为自己的方法,继承的访问权限不变。

  • 子类和父类不在统一包下的 继承性

子类只能继承父类的public和 protected成员变量,并且继承public和 protected方法,继承的成员变量或方法的访问权限不变,但子类无法继承父类的友好变量和友好方法。

2.子类对象 的 构造过程

当子类构造方法创建 一个子类对象时,子类的构造方法总是先调用父类的某个构造方法;如果子类的 构造方法没有明显的指明使用父类的哪个构造方法 ,子类就调用父类的不带参的 构造方法。

因为父类的private成员变量或方法无法被继承,所以我们可以调用父类中的部分方法,使这部分变量可以被操作。

3.成员变量的隐藏和方法重写

当子类中定义的成员变量和父类成员变量同名时,不必类型相同,子类就隐藏了继承的成员变量。(子类重新声明定义了这个变量)

子类想要使用被隐藏的方法,必须使用super来访问。

方法重写:子类中定义的一个方法,并且这个方法的名字、参数类型、返回类型、参数个数和从父类继承的方法完全相同。

重写方法时,不可以降低方法的访问权限。

4.关键字super

super的用法:

  • 子类使用super调用父类的构造方法

调用构造方法时,super必须是子类构造方法中的第一条语句。

  • 子类使用super调用被子类隐藏的成员变量和方法。

5.final类和final方法(类不能被继承,方法不能被重写。

java提供String类,它对编译器和解释器的运行都有很重要的作用,因此被修饰为final类。

6.上转型对象

定义:用父类来声明一个对象,用子类来为其初始化。

特点:

  • 不能 操作子类声明定义的成员变量(失掉部分属性),不能使用子类声明定义的方法(失掉部分功能)。

  • 可以代替子类对象去调用子类重写的实例方法。
  • 可以调用子类继承的成员变量和隐藏的成员变量。

7.多态

多态的前提:

  • 要有继承关系
  • 要有方法重写
  • 要有父类引用指向子类对象

8.抽象

特点:

  • 抽象类中可以有抽象方法
  • 抽象类不能用new创建对象
  • 做上转型对象

与abstract不能共存的关键字

private冲突(不能被继承)

final冲突(方法不能被重写)

static 无意义

9.开-闭原理

一个程序应该对扩展开放,对修改关闭。(面向抽象思想可以提现)

面向抽象核心思想:

  • 抽象细节(将经常需要变化的部分分割出来)
  • 面向抽象设计类

10.接口(接口默认的是public和abstract)

接口的思想在于它可以增加很多类都需要实现的功能,使用相同的接口类不一定有继承关系。

单继承使得java简单、易于管理程序。为了克服单继承缺点(增加了子类的负担,使用不当会引起混乱),使用接口,一个类可以实现多个接口。

如果某个类实现某个接口,那么这个类必须实现接口的所有方法。

在声明接口时,如果使用public,则接口可以被任何一个类使用。但友好接口只能被同一包的类使用。

接口也可以被继承。

接口回调:是多态的另一种体现。(接口变量可以调用被类实现接口中的方法)

接口可以作为参数,就是把该类的实例的引用传值给该参数。

面向接口编程:接口只关心功能,不关心这些功能实现的具体细节。(符合程序的开-闭原理)

面试一问:接口和抽象类的异同?

  • 接口和抽象类都有抽象方法
  • 接口中只可以有常量不能有变量,抽象类中既可以有常量也可以有变量。
  • 抽象类中可以有非抽象方法,接口不可以。

11.内部类(成员内部类,局部内部类,匿名内部类)(不可以声明类变量和类方法)

局部内部类访问局部变量必须加final修饰。

外嵌类了一把内部声明对象作为外嵌类的成员。

匿名内部类:本质继承该类或者实现接口的子类匿名对象。

12.匿名类

匿名类可以继承类的方法,亦可以重写类的方法。

匿名类不可以声明static成员变量和方法。

12.异常(在java运行过程中出现的错误)

程序的异常Throwable

严重问题Error

异常类型:

  • 运行期异常:RuntimeException  (不可解决)
  • 编译器异常:不是RuntimeException  的异常。

jdk7特性:可以使用 "|" 将可能发生异常放在一起。

面试一问:throws和throw的区别?

throws:用在方法声明后,跟的是异常名,可以跟多个异常名,用逗号分开,表示抛出异常,由该方法的调用者处理。

            表示异常出现的可能性,并不一定会发生异常。

throw:用在方法体中,跟的是异常对象名,只能抛出一个异常,由方法体内的语句处理。

           一定是抛出了异常。

被finally控制的语句体,一定会执行。(如果finally之前强制退出jvm,则不会执行)

自定义异常:继承Exception或者继承RuntimeException。

13.泛型(泛型类,泛型方法,泛型接口)

定义:是一种把类型明确的工作推迟到了创建对象或代用方法的时候才去明确的特殊类型(参数化类型),把类型当做参数一样传递

主要目的:建立具有类型安全集合框架,类型安全的数据结构(链表、散列映射表)

好处:

  • 把运行期的问题提前到了编译期
  • 避免了强制转换类型
  • 优化了程序

    使用范围:一般在集合中使用

泛型类型必须是引用类型

通配符:

  • 泛型通配符<?>

泛型类型明确时,前后必须一致

  • <? extends E> (向下限定,E及其子类)
  • <E extends ?> (向上限定,E及其父类)

面试一问:jdk5特性?

  • 自动拆装箱
  • 泛型
  • 增强for(可以代替迭代器,弊端:增强for目标不能为null)
  • 静态导入
  • 可变参数
  • 枚举

 

 

 

 

 

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值