final关键字、抽象类、值交换、接口、多态

final关键字

final关键字是一个修饰符:

final关键字的用法:

1、final关键字修饰一个基本类型的变量时,该变量不能重新赋值,第一次的值为最终的值(final修饰的值第声明的同时要赋值);

2、final关键字修饰一个引用类型变量时,该变量不能重新指向新的对象;

3、final关键字修饰一个函数的时候,该函数不能被重写。;

4、final关键字修饰一个类的时候,该类不能被继承。

常量的修饰符一般为:public static final p = 3.14;

抽象类

目前存在的问题:1.动物类的run方法描述的不正确;2.没有强制要子类一定要重写方法

解决方案(抽象类的应用场景):我们在描述一类事物的时候,发现该种事物确实存在着某种行为,但是这种行为目前是不具体的,那么我们可以抽取这种行为的生命,但是不去实现该种行为,这之后这种行为我们称作为抽象的行为,我们就需要使用抽象类。

abstract class Animal{
    String name;
    String color;
    
    public Animal(String name, String color){
        this.name = name;
        this.color = color;
    }
    // 非抽象的方法
    public void eat (){
        System.out.println("吃饭");
    }
    // 抽象的方法
    public abstract void run ();
}
class Dog extends Animal {
    public Dog (String name, String color) {
        super(name, color);
    }
    //子类中抽象的方法一定要重写
    public void run () {
        System.out.println("狗儿四条腿跑得快"); 
    }
}
class Fish extends Animal {
    public Fish (String name, String color) {
        super(name, color);
    }
    // //子类中抽象的方法一定要重写
    public void run () {
        System.out.println("鱼儿在水里游啊游得快"); 
    }
}
class Demo {
    public static void main (String[] args) {
        Dog d = new Dog("牧羊犬","棕色");
        d.run();
        
        Fish f = new Fish("锦鲤", "金黄色");
        f.run(0;)
    }
}

抽象类要注意的细节:

1、如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象的函数;

2、如果一个类出现了抽象的函数,那么该类也必须要使用abstract修饰;

3、如果一个非抽象类继承了抽象类,那么必须要把抽象类的所有抽象方法全部实现;

4、抽象类可以存在非抽象方法,也可以存在抽象的方法;

5、抽象类可以不存在抽象方法的;

6、抽象类不允许创建对象;因为抽象类是存在抽象方法的,如果能让抽象类创建对象的话,那么使用抽象的对象调用抽象方法是没有任何意义的 。

7、抽象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的。

抽象类的好处:强制要求子类一定要实现指定的方法。

注意:abstract不能与以下关键字共同修饰一个方法:

1.abstract不能与private共同修饰一个方法;2.abstract不能与static共同修饰一个方法;3.abstract不能与final共同修饰一个方法

值交换

值交换:调用一个方法的时候,传递给方法的变量实参,实参上传递变量所存储的值

需求:定义一个函数交换两个基本类型的值

重点:1.形式参数是数据所属函数的局部变量;2.不同函数的局部变量是相互独立,没有任何的关系。

接口

一个类最多只能有一个直接的父类。但是有多个间接的父类。

Java是单继承。

接口: USB接口…拓展功能

接口的定义格式:

interface 接口名 {

}

接口要注意的事项:

1、接口是一个特殊的类;

2、接口的成员变量默认的修饰符为:public static final。那么也就是说接口中的成员变量都是常量;

3、接口中的方法都是抽象的方法,默认的修饰符为:public abstract;

4、接口不能创建对象;

5、接口是没有构造方法的;

6、接口是给类去实现使用的,非抽象类实现一个接口的时候,必须要把接口中所有方法全部实现。

实现接口的格式:

class 类名 implements 接口名{

}

接口的作用:

1.拓展功能;

2.定义约束规范;

3.程序的解耦。(最重要的)

类与接口的关系: 实现关系。

类与接口要注意的事项:

1、非抽象类要实现一个接口时,必须要把接口中所有方法全部实现;

2、抽象类实现一个接口时,可以实现也可以不实现接口中的方法;

3、一个类可以实现多个接口。

接口与接口之间的关系:继承关系。

接口与接口要注意的事项:

1、一个接口是可以继承多个接口;

多态

多态:一个对象具备多种形态。(父类的引用类型变量指向了子类的对象,或者是,接口的引用类型变量指向了接口实现类的对象)

多态的前提:必须存在继承 或者实现关系。

多态的一般格式:

狗 extends 动物{
}
动物 a = new 狗(); // 新建一个对象,这就是多态的写法

多态要注意的细节:

1.多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量;

2.多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数;

3.多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数;

4.多态情况下,不能访问子类特有的成员。

总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名非静态函数时才访问子类的

编译看左边,运行看右边:Java编译器在编译的时候,会检查引用类型变量是否具备指定的成员,如果不具备马上编译报错。

堕胎的应用:

1、多态用于形参类型的时候,可以接受更多类型的数据。

2、多态用于返回值类型的时候,可以返回更多类型的数据。

多态的好处:提高了代码的扩展性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值