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、多态用于返回值类型的时候,可以返回更多类型的数据。
多态的好处:提高了代码的扩展性。