方法重写(override)和方法重载(overload):
重写:发生在继承中,当子类出现和父类一模一样的方法时,子类会重写(覆盖,复写)父类的方法,并调用子类的功能;
使用特点:如果方法名不同,则使用各自的方法;
如果方法名相同,则最终使用子类的方法;
使用注意事项:1)父类的私有方法不能被重写;
2)子类在重写时,访问权限不能比父类的更低;
3)当要重写父类方法是静态的时,子类也必须是静态重写;
重载:发生在同一个类中,当方法名相同,而参数列表(参数个数/参数类型)不同时,发生方法重载,与返回值无关;
关键字 final : 最终的,终态的,无法更改的;
可修饰:
类: 被final修饰的类不能被继承;
变量: 被final修饰的变量(局部变量/成员变量)一旦被定义,则该变量便是常量,在使用前只能初始化一次;
常量的分类:1)字面值常量 :PI
2)自定义的常量:被final修饰,字母全部大写
方法: 被final修饰的成员方法不能被重写;
多态:就是一个事物在不同时刻体现出的不同状态;(水)
(1)产生多态的前提条件:
1)必须发生继承关系;
2)必须有方法重写,将父类方法覆盖掉;
3)必须有父类引用指向子类对象,向上转型;
格式 : 父类名 父类引用 = new 子类名();
(2)多态成员访问特点:
1)当访问成员变量时,编译和运行都看左边(父类),只有当父类中有该变量时,才可编译运行;
2)当访问(非静态)方法时,编译看左边(父类),运行看右边(子类);
3)当访问静态成员时,编译和运行都看左边(父类),静态与类有关;
(3)多态的好处:
1)提高了代码的扩展性;(多态)
2)提高了代码的维护性;(继承)
(4)多态的弊端:
不能访问子类的特有功能;
改进:向下转型:前提是必须有向上转型(多态)
子类名 子类引用 = (子类名)父类引用;
子类引用 . 子类特有功能;
使用不当时会发生 ClassCastException 异常
抽象类:被 abstract 修饰的类,只给出抽象功能
将具体的类抽象出来,在类中只给出抽象(abstract)方法,只有方法名和返回值,但没有方法体;
格式:abstract class 类名(父类名){
public abstract 返回值 方法名();
...
}
注意:1)抽象类中不一定都有抽象方法,但有抽象方法的类必定为抽象类;
2)抽象类中不仅含有抽象方法,还可以含有非抽象方法;
抽象类的特点:
1)抽象类不能实例化(不能创建对象)
2)子类必须重写抽象类(父类)的抽象方法;
抽象类的子类格式: 父类名 父类引用 = new 子类名();//抽象类多态
抽象类成员的特点:
1)成员变量:可以是一个变量,也可以是一个常量;
2)构造方法:有构造方法,但不能实例化,作用:用于子类访问父类数据的初始化
所有的构造方法都是给对象初始化的;(1)显示初始化;(2)默认初始化
3)成员方法:abstract修饰,被继承时子类必须被重写,
可以是抽象方法(限定子类必须重写哪些功能)
也可以是非抽象方法(提高代码的复用性)
abstract 不能与 private final static 这三个关键字共存,会产生冲突;
接口:( 遵循面向接口编程 )
定义一些扩展功能,只有哪个类实现的这个接口,那这个类就必须去实现这些扩展功能;
格式: interface 接口名{
默认修饰(public static final)变量;
默认修饰(public abstract) 返回值 方法名();
}
实现接口:class 类名 implements(实现) 接口名 { ... }
****接口不能实例化(不能创建对象)由子类创建对象
子实现类 : 接口名 引用 = new 实现类名();//接口类多态
实际开发中命名规则:
实现类命名规则: 接口名+impl : 实现类
接口的特点:
1)成员变量:只能是常量 默认修饰( public static final )
2)成员方法:只能是抽象方法 默认修饰( public abstract )
3)接口中没有构造方法,接口主要是扩展功能的,没有具体的类;
关系:
类与类的关系: 继承( extends )关系,只能是单继承,但可以多层继承;
类与接口的关系:实现(implements)关系,可以多实现,并且一个类继承另一个类时,还可以实现多个接口;
接口与接口的关系:继承(extends)关系,可以单继承,也支持多继承;
****任何类都要继承同一个类 Object ,它是所有类的根类;
面试题: 抽象类与接口的区别:
1)成员: 变量 : 抽象类的变量可以是变量,也可以是常量;
接口中的变量只有常量,默认被public static final修饰 ;
方法:抽象类有抽象方法,也可以有非抽象方法;
接口中只有抽象方法,默认被 public abstract 修饰
2) 关系:
类与类的关系: 继承( extends )关系,只能是单继承,但可以多层继承;
类与接口的关系:实现(implements)关系,可以多实现,并且一个类继承另一个类时,还可以实现多个接口;
接口与接口的关系:继承(extends)关系,可以单继承,也支持多继承;
3)设计理念:
抽象类:被继承,体现的是“ is a ”的关系,共性功能;
接口:被实现,体现的是“like a”的关系,扩展功能;