java7—final关键字、abstract和接口
final关键字
- 为什么会有final关键字?
由于继承中有一个方法重写的现象,而有时候我们不想写让子类去重写父类的方法。这时候就出现了final关键字。
final关键字可以修饰类,变量,成员方法。
-
final修饰特点
修饰类:被修饰类不能被继承。 修饰方法:被修饰的方法不能被重写。 修饰变量:被修饰的变量不能被赋值,因为被赋值过的量就变为常量。
abstract
-
abstract不能和哪些关键字共存?
private 冲突 final 冲突 static 不能共存 无意义
接口
-
概述
为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现。
-
接口特点
a:接口用关键字interface表示 格式: interface 接口名 {} b:类实现接口用implements表示 格式: class 类名 implements 接口名 {} c:接口不能实例化 那么,接口如何实例化呢? 按照多态的方式来实例化。 d:接口的子类 a:可以是抽象类。但是意义不大。 b:可以是具体类。要重写接口中的所有抽象方法。
-
接口的成员特点
接口成员特点 成员变量;只能是常量,并且是静态的。 默认修饰符:public static final 建议:自己手动给出。 构造方法:接口没有构造方法。 成员方法:只能是抽象方法。 默认修饰符:public abstract 建议:自己手动给出。
-
类与类,类与接口,接口与接口的关系
a:类与类: 继承关系,只能单继承,可以多层继承。 b:类与接口: 实现关系,可以单实现,也可以多实现。 并且还可以在继承一个类的同时实现多个接口。 c:接口与接口: 继承关系,可以单继承,也可以多继承。
-
抽象类和接口的区别
成员区别 抽象类: 成员变量:可以变量,也可以常量 构造方法:有 成员方法:可以抽象,也可以非抽象 接口: 成员变量:只可以常量 成员方法:只可以抽象 关系区别 类与类 继承,单继承 类与接口 实现,单实现,多实现 接口与接口 继承,单继承,多继承 设计理念区别 抽象类 被继承体现的是:”is a”的关系。 抽象类中定义的是该继承体系的共性功能。 接口 被实现体现的是:”like a”的关系。 接口中定义的是该继承体系的扩展功能。
案例演示
传智播客的老师有基础班的,也有就业班的。
共性:
属性:姓名,年龄
功能:讲课。
现在又要针对日语这种小语种单独开班,
需要部分基础班老师和部分就业班老师会说日语。
请用所学知识把上面的内容用代码体现。
答:1. public class MyTest {
public static void main(String[] args) {
/*
* 传智播客的老师有基础班的,也有就业班的。
* 共性:
* 属性:姓名,年龄
* 功能:讲课。
* 现在又要针对日语这种小语种单独开班,
* 需要部分基础班老师和部分就业班老师会说日语。
* 请用所学知识把上面的内容用代码体现。
*/
Teacher1 teacher1 = new Teacher1();
StandUp ab=teacher1;
ab.name="钢铁侠";
ab.age=22;
System.out.println(ab.name);
System.out.println(ab.age);
ab.lecture();
((Teacher1) ab).SpeakJapanese();
Teacher2 teacher2 = new Teacher2();
StandUp an=teacher2;
an.name="雷神";
an.age=23;
System.out.println(an.name);
System.out.println(an.age);
an.lecture();
((Teacher2) an).SpeakJapanese();
}
2. public abstract class StandUp {
public String name;
public int age;
public abstract void lecture();
}
3. public class StartClass extends StandUp {
@Override
public void lecture() {
System.out.println("上课");
}
}
4. public interface SpeakJapaneseInterface {
void SpeakJapanese();
}
5. public class Teacher1 extends StartClass implements SpeakJapaneseInterface{
@Override
public void lecture() {
System.out.println("基础班老师");
}
@Override
public void SpeakJapanese() {
System.out.println("会日语");
}
}
6. public class Teacher2 extends StartClass implements SpeakJapaneseInterface{
@Override
public void lecture() {
System.out.println("就业班老师");
}
@Override
public void SpeakJapanese() {
System.out.println("也会日语");
}
}