1.final关键字
final修饰特点
修饰类: 被修饰类不能被继承;
修饰方法: 被修饰的方法不能被重写;
修饰变量: 被修饰的变量不能被重新赋值,因为这个量其实是一个常量。
2.方法重写
方法重写是指子类中出现了和父类中一模一样的方法声明(方法名,参数列表,返回值类型),也被称为方法覆盖,方法复写。
例:
父类:
public class Animal {
String name;
int age;
//父类中的eat方法
public void eat() {
System.out.println("吃饭");
}
}
子类:
public class Cat extends Animal {
//重写父类中的eat方法
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
Test类:
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.name = "Tom";
cat.age = 5;
System.out.println(cat.name);
System.out.println(cat.age);
cat.eat();
}
}
运行结果为:
子类中的@Override表示对父类方法的重写,在对父类方法重写时也可以不加@Override,但若是加了,该符号后面的方法父类中没有,程序就会报错。
3.多态中成员访问特点
多态中成员成员变量编译看左边,运行看左边;
成员方法编译看左边,运行看右边。
例:
class Demo {
public static void main(String[] args) {
Base base = new SubClass();
System.out.println(base.x);//成员变量
System.out.println(base.method());//成员方法
}
}
class Base {
int x = 1;
int method() {
return x;
}
}
class SubClass extends Base {
int x = 2;
int method() {
return x;
}
}
运行结果为:
4.向上转型和向下转型
向上转型:父类引用指向子类对象。(多态)
向下转型:把父类的引用强制转换为子类的引用。
向下转型可以解决多态不能使用子类特有的功能的问题。
例:
父类:
public class Animal {
String name;
int age;
//父类中的eat方法
public void eat() {
System.out.println("吃饭");
}
}
子类:
public class Cat extends Animal {
//重写父类中的eat方法
@Override
public void eat() {
System.out.println("吃鱼");
}
//子类特有功能
public void catchMouse() {
System.out.println("抓老鼠");
}
}
Test类:
public class Test {
public static void main(String[] args) {
Animal cat1 = new Cat();//向上转型
Cat cat2 = (Cat) cat1;//向下转型
cat2.name = "Tom";
cat2.age = 5;
System.out.println(cat2.name);
System.out.println(cat2.age);
cat2.eat();
cat2.catchMouse();
}
}
运行结果为:
5.抽象类和接口的区别
(1)成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
(2)关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
(3)设计理念区别
抽象类被继承体现的是:”is a”的关系;抽象类中定义的是该继承体系的共性功能。
接口被实现体现的是:”like a”的关系;接口中定义的是该继承体系的扩展功能。