抽象类和抽象方法的定义:
抽象类是类的一种,是一种引用数据数据类型,它的定义为:
权限修饰符 abstrate class 类名{……}
抽象方法,抽象方法是在某一个方法返回值类型前加一个abstrate修饰,其没有方法体,也就是没有大括号和大括号里面的东西,其不能够实例化,其定义格式为:
权限修饰符 abstrate 返回值类型 方法名();
package extends0.abstract0;
public abstract class T1 {//abstrict是一个抽象类
/**
* abstract关键字:
* 1)abstract关键字可以修饰类,也可以修饰方法
* 修饰的类叫抽象类,被修饰的方法叫做抽象方法
* 2)abstract修饰的类中,也就是抽象类中:
* public abstract 类名{……}
* 类里面可以封装
* 若干成员属性,若干静态方法,若干抽象方法,若干静态方法,
* (以及内部类)
*3)abstact修饰的方法(抽象方法)的定义格式为:
* 权限修饰符 abstract 返回值类型 方法名(参数列表);
* 如 privcte abstract void A(int a);
* 注意到没有方法体,而且必须有abstrict关键字进行修饰
*4)关于抽象类的继承
* extends关键字的继承:
* 抽象类只能被抽象类继承,
* 除非在子类方法中重写了父类的所有抽象方法,否则会报红
*5)同样的抽象类可以被多个类同时继承,满足继承的单向传递,并且只能实现一个继承,
* 父类不能继承子类
*6)单凡一个类里面有一个抽象方法,那么该类就必须用abstrat修饰,也就是抽象类,
*7)abstrat不能与final一起修饰类,原因是abstrat需要继承才能使用,而final修饰的 类不能被子类继承,两者相互矛盾。
*/
//无参无返回抽象方法
public abstract void way1();
//有参有返回抽象方法
public abstract String way2(int a);
//普通实例方法
public void a(){
System.out.println("这是抽象类里面的普通实例方法");
}
//静态方法
public static void b(){
System.out.println("这是抽象方法里面的静态方法");
}
}
--------------------------------Java文件分隔线----------------------------------
package extends0.abstract0;
/**
* 以继承的方式连接T1类
*/
public class T2 extends T1{
public void way1() {
}
public String way2(int a) {
return null;
}
}
--------------------------------Java文件分隔线----------------------------------
抽象类不能实例化的理解
1)抽象类不能创建对象,就好比抽象类是一个半成品,还不能拿出来用,也就是说,不可实例化就是抽象类的普通方法和抽象方法是不能通过该抽象类去调用的,因此,我们一般通过子类继承抽象类,经过重写抽象类的所有抽象方法后,再通过子类来创建对象,可以对子类进行上转型操作
2)虽然抽象方法不能够实例化,不能调用抽象方法和普通实例方法,但满足类的特性,可以通过类名.静态方法名去调用静态方法。
抽象类的上转型对象:
- 1)抽象类也可以进行对象的上转,把子类对象赋值给父类引用
- 2)抽象类的子类可以调用抽象父类的静态方法
- 子类对象名.静态方法名 即可;
- 3) 满足父类对象指向子类的引用,也就是,当实现子类对象的上转时,
- 就不能通过创建子类的对象去调用子类有而父类没有的普通方法了。
static和final关键字
static修饰成员变量
1)用static修饰的成员变量不适于对象的数据结构 2)static变量是属于类的变量,通常可以通过类名来调用static成员
3)static成员变量和类的信息一起储存在方法区,而不是在堆中,一个类的static成员变量只有“一份”,无论了该类创建了多少个对象
package extends0.final0;
public class A1 {
/**
* 测试static关键字
*/
private int age;
private String name;
public static void a(){
System.out.println("这是一个静态代方法");
}
public static void B(){
System.out.println("这是一个静态代方法");
}
public static void D(){
System.out.println("这是一个静态代方法");
}
}
--------------------------------Java文件分隔线----------------------------------
package extends0.final0;
public class Text {
public static void main(String[] args) {
A1 a1 = new A1();
A1.a();
A1.B();
A1.D();
}
}
测试结果
final的中文翻译:
Java里的final的意思是不可改变的意思
final关键字:
1)中文意思为不可变
2)fianl关键字可修饰类,表示该类不可以被其他类所继承can’t inhert class what make up final
3)final可以修饰方法,表示该方法不能被重写,但是可以实现方法间的重载
4)final可以修饰变量,表示变量了不可以被重新赋值,final修饰变量是必须同时初始化变量的值,
can’t assign a value to final vulable one
5)final不可以修饰接口interfance
6)被fianl 和static 同时修饰的变量是一个常量;
测试成员变量的调用形式
-
- 非static修饰的成员变量只能通过创建对象去调用(访问)
- 2)静态成员变量既可以通过该类名.成员变量去调用,也可以通过创建的对象去调用