2021年7月28日
讲师:王博
-今日内容:
·final关键字【重点】
·接口【重点】
·多态【重点】
·static关键字【重点】
1final关键字
字面意思:最终的,最后的
用法:
·fianl可以修饰成员变量
使用final修饰成员变量的时候,必须进行赋值(初始化),赋值以后,这个值就不能更改了
·final可以修饰局部变量
局部变量使用final修饰的时候可以不赋值,使用final修饰的局部变量一旦被赋值,就不可以被修改
·final可以修饰成员方法
Final修饰的成员方法,子类不能重写!
·final可以修饰类
Final修饰的类,不能被继承
2接口
2.1生活中的接口
Usb
插座
扩展功能!!!
2.2java中的接口
语法格式:
Interface 接口名{
成员属性;//在很少有
成员方法;
}
注意事项:
·接口下面可以声明成员属性,但是要赋值,因为默认被final修饰
·接口下面的方法必须都是抽象方法,abstract是默认的
·接口不能被实例化
·接口必须使用一个类去实现它(implements)
·必须重写接口中所有的抽象方法
·可以实现多个接口,相当于实现了多继承
·java8及以上的版本可以写默认的方法,这个方法带有方法体(带default)
2.3抽象类和接口的区别【面试题】
·接口的方法都是抽象方法,抽象类可以有非抽象方法
·类可以实现多个接口,但是只能继承一个抽象类
·类如果要实现一个接口的话,必须要实习它所有的抽象方法
类如果要继承一个抽象类的话,可以不必重写非抽象方法
·抽象类去实现接口,接口的方法在抽象类中可以不强制重写
·javajava8及以上的版本可以写默认的方法,这个方法带有方法体(带default)
2.4接口的案例
3多态【重要】
封装 继承 多态
父类的引用指向子类的对象
Fater son 其中Father是Son类的父类
Father father= new Son();
为什么要使用多态的一种写法:
多态的使用可以让咱们的代码变的更加的灵活,简洁,具有普适性
3.1多态案例
见文件夹e_duotai f_duotai
3.2向上转型和向下转型
父子对象之间的转换分为向上转型和向下转型,他们的区别如下:
向上转型:通过子类对象(小范围)去实例化父类对象(大范围),属于自动转换【父类的对象引用子类的对象】,小范围转为大范围 是自动转的
向下转型:通过父类的对象(大范围)去实例化子类的对象(小范围),属于强制转换
3.2.1向上转型
A a = new B();//向上转型 ,父类的引用指向子类的对象
//通过子类去实例化父类
a.test();
//意义:当我们需要对方法进行传参数的时候,这个参数可以是父类的对象,但是真实的参数是子类的对象
3.2.2向下转型【了解】
在java中,向下转型是为了通过父类强制转换成子类,从而可以调用子类独有的方法
向下转型在真实的项目中很少,几乎不用!!!
向下转型是为了调用子类独有的方法
package com.liujinghe.g_change;
class A1{
public void test(){
System.out.println("A1:test");
}
}
class B1 extends A1{
@Override
public void test() {
System.out.println("B1:test");
}
public void funcB(){
System.out.println("funcB");
}
}
class C1 extends A1{
@Override
public void test() {
System.out.println("C:test");
}
public void funcC(){
System.out.println("funcC");
}
}
public class Test1 {
public static void main(String[] args) {
// A1 a1 = new B1();//B1是A1的一个子类
// System.out.println(a1 instanceof A1);
// System.out.println(a1 instanceof B1);
A1 a1 = new A1();
func(a1);
}
public static void func(A1 a1){
a1.test();
if(a1 instanceof B1){
//语法格式
//子类 子类变量名字=(子类)父类对象
B1 b1 = (B1) a1;//强制转换 获得子类特有的方法,要获取子类的对象
//但是你的参数是父类的a1 a1变成b1 只能强转
b1.funcB();
}else if(a1 instanceof C1){
C1 c1 =(C1)a1;
c1.funcC();
}
}
}
总结:
父转子,需要强制类型转换,目的是调用子类独有的方法
子转父,自动转换,啥也不需要,但是不可以调用子类独有的方法
作业:
·代码敲三次
·书面作业
默写抽象类和接口的区别
默写多态的三个必要条件
默写多态的优点
默写final关键字的用法
·作业
背:
抽象的意义
抽象类和接口的区别
多态表现在哪里
什么是多态