标签:引用 基本 teacher 没有 arp 方法 参数 each 丢失
*************************简述一下final(面试题)*********************************
一.修饰变量
1. 基本类型
final double PI = 3.14;// 最终变量 表示常量 只能被赋值一次
PI = 3.15;//编译报错 无法为最终变量PI分配值
2.引用类型
final String s = "aaa";//最终引用 表示s只能引用 "aaa" 不能再引用其他对象了
s = "bbb";//编译报错
二. 修饰类
最终类 最终类不能被继承 相当于类的最终版本
程序员如果编写一个类,不想让别人继承,可以使用final 修饰这个类
一般jdk中的类 都是最终类 String、Integer、System..
final public class Bird{
}
三.修饰方法
修饰方法 最终方法
最终方法不能被重写
***************************************最终方法可以被继承吗???*******************************
可以被继承. 能不能被继承 和final没关系, 能不能被继承是看 访问控制权限修饰符..
***************************************向上转型******************************************
向上转型: 建立在继承的基础上, 把子类型的对象 赋值给父类型的引用。 可以理解成 引用类型的宽转换
向上转型会 "丢失" 子类 独有的行为
演示代码:
package com.chapter8.演示向上转型;
/**
* 作者: zhangzy
* 公司: 蓝桥软件学院
* 时间: 2017年7月6日 下午3:11:21
* 功能: 演示向上转型
* 向上转型: 把子类的对象 赋值给父类的引用 叫做向上转型
*
* 向下转型: 父类型的引用 赋值给 子类型的引用
*/
public class Teacher extends Person{
public void teach(){
System.out.println("讲课");
}
public static void main(String[] args) {
Person person = new Teacher();
/* Teacher teacher = new Teacher();
Person person = teacher;//向上转型 是安全的 自动的
*/
//向上转型 会 "丢失" 子类独有的行为
//父类型 不能调用 子类中独有的方法
//person.teach();
//Teacher teacher2 = (Teacher)person;//向下转型 不安全的 也不是自动的
//ClassCastException 运行的时候抛出一个异常 类转换异常
//Teacher cannot be cast to Student
//Student student = (Student)person;
}
}
*************************************多态*********************************
一.why
好处: 可以写出 可维护的 通用性代码,能应对需求的不断变化...
public class BlueBridgeCollege{
public void makeTeacherWork(JavaTeacher teacher){
teacher.teach();
}
}
一开始蓝桥软件学院只教java,让老师工作的方法需要定义 JavaTeacher 类型,业务扩容以后
又讲CSharp,以前的方法不能满足需求了,需要再添加一个方法
public void makeTeacherWork(CSharpTeacher teacher){
teacher.teach();
}
如果讲100门课,需要编写100个类似的方法,显然是比较傻.如何解决??
其实这100个方法方法,区别在于类名不同,有没有一种类型,可以兼容100种类型?
是有的.父类型
用多态来解决这个问题
二. what 什么是多态
一份代码、多种形态. 以1当10,以1当100
多态: 实例方法的动态绑定...、动态联编、后期绑定....
绑定: 给定一个方法名,通过该方法名决定到底执行哪块代码的过程叫做绑定...
动态绑定: 运行的时候 决定 到底执行哪一块代码...
根据传入对象的不同,传入的是javaTeacher对象 调用javaTeacher对象的teach() 打印 我在讲java
//传入的是csharpTeacher对象 调用csharpTeacher对象的teach() 打印 我在讲c#
三. how 编写多态的代码
1. 定义一个父类型(父类、抽象类、接口)
2. 定义一个子类型
(1)子类来继承父类 重写父类的方法
(2)子类继承抽象类 重写抽象类的方法
(3)子类实现接口 实现接口的方法
3. 定义一个测试方法, 方法的参数一定要是 父类型
运行的时候 传入子类的对象
***************************************几个小的面试题*****************************************
1.静态方法有多态吗??
没有.静态方法是静态绑定的, 不管运行的时候传哪个对象,都是调用的父类型的方法..
2. private 修饰的方法有多态吗?
没有.
3.final 修饰的方法有多态吗??
没有
4. 属性有多态吗?
没有.
标签:引用 基本 teacher 没有 arp 方法 参数 each 丢失
原文地址:https://www.cnblogs.com/MrTanJunCai/p/9906784.html