1.final关键字是最终的意思,可以修饰类,成员变量,成员方法。
修饰类,类不能被子类继承;修饰方法,方法不能被子类重写。
2.final修饰变量(成员变量或局部变量),则成为常量,只能赋值一次。
3.修饰成员变量时,定义时同时给出初始值,而修饰局部变量时可以暂时不赋初始值,但是只能够赋值一次。
常量
10 0.5 false true ‘a’ “abc” null…
如果是1.8之前的JDK,那么匿名内部类中访问外界的局部变量需要加final,1.8之后不需要。
1.生活中: 同一个动作在不同环境下表现出来的不同状态
2.Java中: 同一个方法在不同的对象中体现出来不同的状态
3.内存中: 父类引用指向子类对象
1.成员变量: 编译时期看左边的类型,如果左边类型中没有变量,编译报错
2.成员方法:
3.构造方法:
4.静态方法:
1.提高了程序的维护性
2.提高了程序的扩展性
3.简化了代码
使用父类引用无法访问子类所特有的方法
基本类型存在自动类型转换和强制类型转换
引用类型存在向上转型和向下转型
(1)向上转型(自动转换)
格式:<父类型> <引用变量名> = new <子类型>();
特点:
1.子类转为父类 父类的引用指向子类对象。理解为自动进行类型转换
2.此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法
3.此时通过父类引用变量无法调用子类特有的属性和方法
(2) 向下转型(强制转换)
格式:<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;
特点:
被abstract关键字所修饰的类被称为抽象类。
格式
abstract class 类名 {}
1.抽象方法和抽象类使用 abstract 修饰
2.有一个抽象方法的类必须是抽象类
3.抽象类中一定有抽象方法吗? --> 不一定
4.没有抽象方法的抽象类有意义? --> 有意义,防止外界创建对象
_(1)防止外界实例的方式:
5.抽象类不能够实例化 – 利用多态
6.抽象类的子类的特点:
7.抽象类和普通类的区别
抽象类中可以有成员变量,成员方法,构造方法,静态方法,常量? 有的话又有什么意义呢?
8.抽象类的成员一般使用 public 或者 protected
9.private final static native 可以用来修饰抽象方法吗?
1.抽象方法没有方法体
2.抽象方法必须在抽象类里
3.抽象方法必须在子类中被实现,除非子类是抽象类
举例:
编写交通工具类,具有前进run()功能,子类有自行车、小轿车、地铁,重写父类方法,主人有属性name,age属性,方法回家goHome(交通工具),需要使用交通工具,使用抽象类优化程序。
public class AbstractDemo01 {
public static void main(String[] args) {
Hoster hoster=new Hoster("张三", 30);
Vehicle v =new Bike();
hoster.goHome(v);
hoster.goHome(new Cars());
new Hoster("李四", 20).goHome(new Subway());
}
}
abstract class Vehicle {
public abstract void run();
public abstract void run(Hoster hoster);
}
class Hoster {
private String name;
private int age;
public void goHome(Vehicle v) {
v.run(this);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Hoster(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Hoster() {
super();
}
}
class Bike extends Vehicle{
@Override
public void run() {
System.out.println("自行车在跑");
}
@Override
public void run(Hoster hoster) {
System.out.println(hoster.getName()+"骑着自行车回家");
}
}
class Cars extends Vehicle{
@Override
public void run() {
System.out.println("小轿车在跑");
}
@Override
public void run(Hoster hoster) {
System.out.println(hoster.getName()+"开着小轿车回家");
}
}
class Subway extends Vehicle{
@Override
public void run() {
System.out.println("Subway.run()");
}
@Override
public void run(Hoster hoster) {
System.out.println(hoster.getName()+"坐着地铁回家");
}
}
接口
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和抽象方法的定义,而没有变量和方法的实现。
接口的格式:
public interface 接口名{
//常量
//抽象方法
}
接口的实现类格式:
public 类名 implements 接口{
// 实现接口的方法
//普通方法
}
1.接口使用interface修饰
2.接口是常量和抽象方法的集合
3.在JDK1.8以后不仅仅只有常量和抽象方法,还有默认方法和静态方法
4.接口不能够实例化
5.接口如果想要实例化–利用多态
6.接口的实现类特点:
7.接口是一种规范
8.接口可以用来扩展功能
9.接口是灵活的
10.接口是由继承者来实现
11.接口/类之间的关系
12.接口和继承的区别?