java面向对象——抽象类、final类
5.3抽象类
5.3.1抽象类产生过程
- 抽象类的产生过程:一致不断的向上抽象,越抽象的内容越不容易理解,越难具象化表现。抽象类本质还是一个类。类中存在的内容差不多都存在。
5.3.2抽象类的定义
- 当多个类中出现相同的功能,但是功能主体不一样,这时候可以进行向上抽取,只抽取功能定义,而不抽取功能主体,并将这些功能定义封装进一个类,并且将这些功能使用abstract声明修饰,并且没有方法体(没有花括号),那么这类就成了一个抽象类
5.3.3抽象类中定义格式
修饰符 abstract 类 类名{
}
public abstract class Animal{
}
5.3.4抽象类中定义的内容详解
- 抽象类中可以定义和类中完全一样的内容(属性、方法、构造器)。
- 抽象类中的方法可以是抽象方法,也可以是非抽象方法。
- 抽象类就是通过abstract修饰的类。它的目的是用来被继承的。
- 被abstract修饰的方法称之为抽象方法,抽象方法只有方法的声明没有方法体以及大括号。
5.3.5抽象方法的格式
修饰符 abstract [void|返回值类型] 方法名称(参数列表);
public abstract int method(int number);
- 抽象方法目前只能定义在抽象类中,抽象方法一定是在抽象类中吗?(不一定的,接口中也可以定义抽象方法。)
- 抽象类中的抽象方法就是用来被重写的。
- 抽象中的类不能被创建对象,因为抽象类不能被实例化
- 抽象类中的构造器就是用来被子类调用的,而不是用来产生对象的,因为抽象类无法被实例化。
- 子类如果只重写一部分的抽象方法,那么子类还是抽象类
- 抽象类一般情况下我们是用来看懂别人的源码的,继承关系只有一次。
- 当一个类继承了抽象类之后,需要重写抽象类中的所有抽象方法。而且需要查看整个继承链中是否存在其他抽象方法,如果有也必须要全部重写
代码演示:
//导包导入jdk中的包
import java.util.AbstractList;
public class Test01{
public static void main(String[] args){
Animal an=new Dog();
an.run();
}
}
abstract class Animal extends AbstractList{
int age;
public Animal(){
System.out.println("我是animal");
}
public abstract void run();
}
class Dog extends Animal{
public void run(){
System.out.println("单脚大跳");
}
//重写AbstractList中的方法
@Override
public Object get(int index){
return null;
//重写AbstractList中的方法
}
@Override
public int size(){
return 0;
}
}
执行结果:
我是animal
单脚大跳
5.4final类
作用:final是java中的关键字,可以用来修饰类,方法,变量(成员变量、局部变量)
-
final修饰的类不可以被其他类继承
-
final修饰的方法不可以被重写
-
final修饰的变量叫常量,不允许再次赋值,
-
在对变量进行final修饰时,一定要赋值,否则未初始化,
-
书写规范:所有字母都必须大写并且单词之间用_连接
例如:final NAN_MA_GE;
-
代码演示:
class F{
public boolean study(){
System.out.println("勤奋、努力");
return true;
}
public final boolean isMan(){
if(study()&&marry()){
return true;
}
return false;
}
public boolean marry(){
System.out.println("结婚生子");
return true;
}
}
class S extends F{
public boolean study(){
System.out.println("玩着学好。。。");
return true;
}
public boolean marry(){
System.out.println("结婚");
return true;
}
}