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 其中FatherSon类的父类

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();//B1A1的一个子类
//        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关键字的用法

·作业

 

 

背:

抽象的意义

抽象类和接口的区别

多态表现在哪里

什么是多态

posted @ 2021-07-28 16:17  张三疯321  阅读(50)  评论(0编辑  收藏  举报