1、课程概述
本课程主要学习Java中的重要概念继承和多态,通过案例的方式进行讲解,让你对继承和多态在企业中的应用更加了解。
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程.
Java的继承和多态
2.继承的应用
2.1 什么是多态
前面我们了解了课程大纲,给大家介绍一下关于动态的概念,首先我们要认识到所有的软件都是为了解决生活中的问题而存在的,解决生活中的问题,首先要做到的是还原我们生活中的场景,而在我们生活中就存在着各种动态变化的事物以及操作行为,这些变化关系反映到程序代码中,我们就称呼为多态,多态呢,他能解决一些看上去相对比较复杂的关系以及流程业务,主要的通过两个方面来体现,第1个方面呢就是程序运行过程中,对象角色的一个切换,另外一个过程中,对象行为的一个扩展变化
多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
多态:程序运行过程中,对象角色的切换:如老师,在家是丈夫或妻子,在校是老师
程序运行过程中,对象行为的扩展:如孵蛋器:把鸡蛋/鸽子蛋->孵出小鸡和鸽子
2.2 继承基本语法和使用场景
1.继承
2.重写
3.父类引用指向子类对象。
3.final和super关键字
3.1 final关键字
final变量有成员变量或者是本地变量(方法内的局部变量),在类成员中final经常和static一起使用,作为类常量使用。其中类常量必须在声明时初始化,final成员常量可以在构造函数初始化。
final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。final变量一旦被初始化后不能再次赋值。
本地变量必须在声明时赋值。 因为没有初始化的过程
在匿名类中所有变量都必须是final变量。
final方法不能被重写, final类不能被继承
接口中声明的所有变量本身是final的。类似于匿名类
final和abstract这两个关键字是反相关的,final类就不可能是abstract的。
final方法在编译阶段绑定,称为静态绑定(static binding)。
将类、方法、变量声明为final能够提高性能,这样JVM就有机会进行估计,然后优化。
代码
package 十;
public class p1 extends Father {//定义一个子类并继承父类
public class Father {
public Integer regNo; //定义一个Integer类型的变量
public String name; //定义一个字符串
public String gender; //定义一个字符串
public Integer age; //定义一个Integer类型的变量
public String job; //定义一个字符串
public void working(){ //定义一个方法
System.out.println(this.name+"在工作中....");//输出信息李白在工作中....
}
}
public void playGame(){//定义一个方法
System.out.println(this.name+"在游戏中....");//输出信息
}
public static void main(String[] args) {//主方法
p1 son=new p1();//创建一个对象
//操作属性
son.name="李白";//继承
//操作方法
son.working();//继承
son.playGame();//自有
}
}
运行结果
3.2 super关键字
super 关键字是一个引用变量,用于引用直接父类对象。 每当创建子类的实例时,父类的实例被隐式创建,由 super 关键字引用变量引用。 super 可以用来引用直接父类的实例变量。
super 关键字的功能:
1.在子类的构造方法中显式的调用父类构造方法
2.访问父类的成员方法和变量。
代码
/**
* 基础类型
*/
public class Users {//类名
public int id;//定义一个公用的整型变量id
public String name;//定义一个字符串类型变量name
public int age;//定义一个公用的整型变量age
public String gender;//定义一个字符串变量gender
public boolean equals(Object obj){//定义一个方法传入一个参数
if(!(obj instanceof Users)){//判断obj是否属于User
return false;//返回布尔类型
}
Users user=(Users)obj;//进行类型转换
//if(this.age>=user.age){
//return true;
//}else if(this.age<user.age){
//return false;
//}
//return this.age>=user.age?true:false;
return this.age&g