课程内容:
-
多态
-
方法重载
-
方法覆盖
-
构造方法
-
扫描仪
多态:一个对象总有不同的类型去定义它
-
作用一:创建对象 -》 父类类型 = new 子类对象();
-
Person x = new Teacher();
-
Animal y = new Cat();
-
当我们使用多态创建完一个对象之后 这个对象只能调用父类和子类共有的属性/方法 一旦调用子类特有的属性/方法报错
-
报错的原因:在编译阶段 编译器只看等号的左边进行语法检查
-
-
作用二:放在参数里面用于解除代码之间的耦合度
-
耦合度:代码之间的相互依赖程度
-
方法定义的时候 参数传父类类型
-
方法调用的时候 参数传子类对象
-
方法重载 方法过载 Overload
-
面试题:方法重载需要哪些条件?
-
需要发生在同一个类体中
-
方法名需要一模一样
-
方法的参数必须不同
-
类型不同
-
个数不同
-
顺序不同
-
-
方法重载对修饰符和返回类型没有要求 重点看参数 方法名 是否在同一个类中
-
-
方法重载有什么作用?
同时满足用户的不同需求
System.out.println(); println();
System.out.println(45); println(int)
System.out.println(45.5); println(double)
System.out.println(4500L); println(long)
System.out.println('a'); println(char)
System.out.println("a"); println(String)
System.out.println(true); println(boolean)
方法覆盖 方法重写 Override
-
方法覆盖的条件?
需要发生在有继承关系的两个类中 而且是在子类里面发生的 子类在继承得到父类的方法之后 觉得父类的实现不好 于是在子类里面重新实现一下
-
方法覆盖需要注意:
public void test()throws Exception{}
| |
脑袋 躯干 尾巴
脑袋:子类的访问权限修饰符 >= 父类的权限
Sun公司认为子类重新实现的方法应该更加优秀 更加优秀的 方法 应该给更多的人使用 这样才利于Java的发展
躯干:返回类型 + 方法签名
5.0之前 返回类型一模一样
5.0开始 返回类型可以协变
尾巴:异常处理部分 <= 父类的异常 [范围小于等于]
异常:程序执行的过程中 可能会出现的隐患
Sun公司认为子类重新实现的方法应该更加的优秀 更加优秀
的方法不应该有更多的隐患 -
jdk5.0开始 方法覆盖的时候可以加上@Override
-
@Override注解 用来给机器看的 表示下面的方法一定会覆盖父类的某些方法
-
-
jdk5.0开始 方法覆盖的时候返回类型可以改变了
-
可以变成父类方法返回类型的子类类型 -》 协变返回类型
-
构造方法:
- 构造方法是创建对象的方法
- 构造方法是创建对象的时候调用的方法-》收尾的工作
-
构造方法的作用?
构造方法语法的出现是为了方便程序员的开发
它可以在创建对象的同时直接给属性赋值
在Java中 任何一个类都有构造方法 即使我们没有写 系统也会提供一个默认的构造方法
默认的构造方法:无参 空体 并没有对属性赋值
如果我们想要在创建对象的同时直接给属性赋值的话 需要自己写一个构造方法
不过一旦我们写出自己的构造方法之后 默认的构造方法将不再提供 -
构造方法的特点
1:构造方法没有返回类型 连void都不能写 -》
修饰符 + 方法签名(){}
2:构造方法的名字需要和类名一模一样[通常首字母大写] -
构造方法的首行:
-
默认super():表示要执行本构造方法之前 先去执行父类的构造方法 默认找父类的无参构造方法
-
如果父类没有无参构造方法:-->说明父类中重新写了一个带参的构造方法
-
提供父类的无参构造方法
-
在super()里面传参数 指定他找哪一个构造方法
-
-
-
还可以出现this(): 表示要执行本构造方法之前 先去执行本类的其他的构造方法 具体执行本类的哪一个构造方法 看参数类型
-
-
super()和this()都只能出现构造方法的首行
-
因此super()和this()只能在一个构造方法中出现其中的一个
-
-
面试题:
-
构造方法能不能被子类继承 ?不可以
-
构造方法能不能方法重载?可以
-
构造方法能不能方法覆盖?不可以 覆盖的前提是需要先继承得到 构造方法不能被子类继承 因此不能被覆盖
-