概念 :在java中可以使用extends关键字表示类与类之间的关系,一旦类与类之间有了继承关系,子类就可以直接使用父类非私有的内容;
继承特点
-
继承是面向对象三大特征之一。(封装,继承,多态)
-
可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
继承的格式 public class 子类 extends 父类{
}
继承中成员变量的访问特点如下:
成员变量访问特点
-
如果都没有就继续找父类的父类...依次类推,直到最高父类还是找不到就报错
注意:以上查找父类成员是基于非私有的权限的,如果是私有的,即使父类中有,那么子类是无法直接访问的!
super关键字:
访问成员变量:[super成员变量了解即可,不常用],[this构造方法了解即可 不常用],[this成员方法更少见到]
成员方法访问特点
-
先找自己的成员方法
-
再找父类的成员方法
-
如果都没有就继续找父类的父类...依次类推,直到最高父类还是找不到就报错
注意:以上查找父类成员是基于非私有的权限的,如果是私有的,即使父类中有,那么子类是无法直接访问的!
构造方法[重点难点]
构造方法访问特点
-
每一个子类构造方法的第一条语句默认都是:super()
-
子类中为什么所有的构造方法默认都会访问父类中无参的构造方法呢?
-
答:因为java规定在创建子类对象的时候,必须先创建出这个子类的父类对象,以便于子类使用父类非私有的内容;
-
如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?
答:有3种解决办法.1:在父类中添加空参数构造方法{不添加会报错};2:手动调用自己的其他构造方法;3:手动调用父类的构造方法;
什么是方法重写 : 在子类中拥有和父类一模一样的方法声明,就是重写;
方法重写的应用场景
-
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
-
@Override
-
1.5 Java中继承的注意事项
-
Java中类只支持单继承,不支持多继承
-
Java中类支持多层继承(或者叫继承具有传递性)
-
构造方法不可以继承,子类的就是子类的,父类的就是父类的;
修饰符:
什么是修饰符?
可以对代码的访问权限进行控制的修饰符;
代码:
Final
代码:
final关键字是最终的意思,可以修饰(类、方法、变量)
第一个特点:修饰方法:表明该方法是(最终方法),不能被(重写)
第二个特点: 修饰变量 表明该变量是常量,不能再次被赋值
第三个特点 : 修饰类:表明该类是(最终类),不能被(继承)
基本数据类型:
引用数据类型:
final是什么
答:final是java提供的一个(状态修饰符),被final修饰的内容表示是(最终的意思),不能被(再次修改);
final能修饰什么
-
可以修饰类
-
可以修饰方法
-
可以修饰变量(注意事项:final修饰基本类型的变量,变量存储的数据不能被改变)
final 修饰的特点是什么
-
修饰方法:表明该方法是最终方法,不能被重写
-
修饰变量:表明该变量是常量,不能再次被赋值(既只能赋值一次)
-
修饰类:表明该类是最终类,不能被继承
final修饰局部变量 代码:
以上特点①
static代码
static修饰特点 代码:
这个是一个非静态的内容,不能被一个静态的方法访问
访问:没有报错
只能访问静态的成员变量的,不能访问非静态的成员变量--静态static
提示报错:这是一个非静态的方法,不能被一个静态的方法访问
static是什么
答:是一个状态修饰符,表示静态的,被static修饰后这个内容不再属于对象,属于类,可以被所有的对象共享使用;
static可以修饰什么
答:1: 成员变量,2:成员方法;
被static修饰的内容有什么特点
-
被类的所有对象共享,这也是我们判断是否使用静态关键字的条件
-
可以通过类名调用,当然,也可以通过对象名调用,推荐使用类名调用
静态与非静态的访问特点
总结成一句话就是:静态成员方法只能访问静态内容,而非静态的方法可以访问非静态内容也可以访问静态内容
造成这个现象的原因是什么
答:因为static的内容属于类,是随着类的加载而进入内存(进内存的早),非静态的内容属于对象,是随着对象的创建而进入内存(进入内存的晚);
static应用场景:编写工具类
编写工具类步骤:
-
将工具类的构造方法私有;
-
将工具类中的所有方法都设计为静态方法即可;
static应用场景:
编写工具类
编写工具类步骤:
-
将工具类的构造方法私有;
-
将工具类中的所有方法都设计为静态方法即可;
类型转换
- 自动类型转换:父类 变量名 = new 子类();例如:People p = new Teacher();
- 强制类型转换:子类 变量名 = (子类)父类变量;例如:Teacher t = (Teacher)p;
强制类型转换的一个注意事项
- 存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。
- 运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException)
强转前,Java建议:
- 使用instanceof关键字,判断当前对象的真实性,再进行强转。
多态:
什么是多态?
- 多态是在继承/实现情况下的一种现象,表现为:
- 对象多态,是指同一个对象,在不同时刻可以拥有不同的形态!表现出不同的功能!
- 行为多态、是指多个对象的同一个方法表现出不同的效果!
多态的具体代码实现
多态的前提
- 有继承/实现关系;存在父类引用子类对象;存在方法重写。
多态的一个注意事项
- 多态是对象、行为的多态,Java中的属性(成员变量)不谈多态
抽象类:
接口:
内部类
1.1 内部类概述
那什么是内部类呢?
- 内部类:就是在(一个类中)定义一个(类)。
- 举例:在一个(类A)的内部定义一个(类B),(类B)就被称为内部类
格式:
范例:
内部类的访问特点:
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要访问内部类的成员,必须创建对象
IDEA中去演示:
/*
内部类格式:
public class 类名{
修饰符 class 类名{
}
}
内部类访问特点:
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象
*/
public class Outer {
private int num = 10;
public class Inner {
public void show() {
System.out.println(num);
}
}
public void method() {
// show();
Inner i = new Inner();
i.show();
}
}
1.2 成员内部类
内部类在类中定义的位置不同,可以分为如下两种形式:
在类的成员位置:成员内部类
在类的局部位置:局部内部类
成员内部类就是指在类的成员位置定义内部类
IDEA中去演示一下:
-lamdba:
枚举
可以避免非法数据 ,可以增强代码的可读性,安全性
API
1.1 API概述【理解】
- 什么是API
API (Application Programming Interface) :应用程序编程接口
- java中的API
指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
1.2 如何使用API帮助文档
- 打开帮助文档
- 找到索引选项卡中的输入框
- 在输入框中输入Random
- 看类在哪个包下
- 看类的描述
- 看构造方法
- 看成员方法