抽象类

来源:互联网 发布:dota2国服四君子 知乎 编辑:程序博客网 时间:2024/04/27 18:01

abstract

首先查看单词意思

v.提取;抽取;把…抽象出;分离n.概要;抽象派艺术作品adj.抽象的(与个别情况相对);纯理论的;抽象的(与具体经验相对)网络

总体来说就是抽象、提取的意思,抽象不明白的话,提取我们应该知道,把某些共同的东西提取出来,避免了重复写的东西,提取精华。

对于提取出来的方法,我们就知道这种方法应该有的特性:
1. 抽象方法(提取方法) ,不能有方法体,可以让别人去写自己想要的方法体
2.抽象类中,也应该有具体方法(这种方法,可以用final规定大家都不能改;当然不用final修饰,表示你继承了后就可以修改)

例子

抽象类Person.java
定义变量:名字、年龄
抽象方法:name()
模板方法(继承Person后不能改的方法):age()
具体方法(有具体方法体):introduce()

abstract class Person{    String name;    int age;    protected abstract void name();    final public void age(){        System.out.println("age="+age);    }    void introduce(){        System.out.println("name="+name+"age="+age);    }}

Student(子类)继承Person(父类)
继承Person
定义变量:年级
定义函数:study()
重写override函数inroduce()

public class Student extends Person {    int grade;    @Override    protected void name() {    }    @Override    void introduce() {        super.introduce();        System.out.println("grade="+grade);        // introduce()在Person中是具体方法,也没有final,所以可以选择性复写        // age()由于有final修饰,所以Student继承了Person,根本没有这个方法的提示,不允许修改    }    // 子类中还可以定义自己的方法    void study(){        System.out.println("学习");    }}

Test主函数入口
//函数、方法
//1、一个引用能够调动哪些成员(变量和函数),取决于这个引用的类型
//2、一个引用调用的是哪一个函数,取决于这个引用所指向的对象

class Test{    public static void main(String args[]){        Student s = new Student();        Person p = s;        p.name = "zhangsan";        p.age = 12;        //p.grade = 5;//参考第一句话,这样的写法是错误的        p.introduce();//是使用Person的introduce还是Student的?参考第二句话(PS:此处引用了Student的introduce方法)    }}

总结

抽象类天生是用来当爹的(有人天生为爹)
不能用new生成自己的对象,只能用来继承,或者作为向上转型的对象。
抽象类,也是有构造函数的,在生成子类对象的时候被调用。
生成子类的时候,必须先调用父类的构造函数。都会用super方法。
1、抽象方法就是没有函数体的函数(可以没有抽象函数,但是也可以是抽象类);也可以有实现了方法体的方法,具体方法。
2、抽象类使用abstract来定义(只能用来被继承)
3、抽象类不能生成对象,但是却可以拥有构造函数

0 0
原创粉丝点击