------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!-------
面向对象之抽象
抽象类(abstract)
(1)只抽取了很多类的方法的声明,为了保证不出问题,方法声明用abstract修饰。
(2)抽象类的特点
A:一个类如果有了抽象方法,那么这个类必须是抽象类。抽象类里边可以没有抽象方法。
B:抽象类是不能够被实例化的。不能够创建对象的。
C:如果一个类继承抽象类,那么,它要么重写抽象类中的所有抽象方法,要么本身也是抽象类。
(3)抽象类的成员特点:
A:成员变量:子类可以直接继承抽象类中的成员变量。(抽象类中的成员变量可以和以前是一样的)
B:成员方法:抽象类中分为两种方法,
一种是抽象方法,这种方法在子类中必须要被实现。
一种是普通的方法。可以被子类直接继承使用。
C:构造方法:抽象类不能被实例化,那么它有构造方法吗?抽象类是class,那么它就有构造方法。它的构造方法有用吗?
有,为了让子类实例化的时候使用。
(4)举例:教师举例,学生举例,员工举例
(5)抽象类的相关问题:
A:抽象类中是否有构造函数?
构造函数是对象的基本,没有构造函数就没有对象。
若果在父类中(这里就是你的抽象类)中显示的写了又参数的构造函数,在子类继承是就必须写一个构造函数来调用父类的构造函数
例子:
1 abstract class Person { 2 //定义一个抽象类,必须被继承 3 4 5 Person(int i) { 6 7 8 } 9 } 10 11 public class Student extends Person { 12 13 14 Student() { 15 16 super(int i)://必须显示的调用父类构造方法//super代表父类对象 17 } 18 } 19 20 如果父类中有没有参数的构造函数,在子类中可以不显示的写父类的构造函数,Java会自动调用没有参数的构造函数 21 例子: 22 abstract class Person { 23 //定义一个抽象类,必须被继承 24 25 26 Person() { //此构造函数也可以不写,Java会默认添加一个没有参数的构造函数 27 28 29 } 30 } 31 32 public class Student extends Person { 33 34 35 Student() { 36 37 //super();//可以不写,Java会自己调用这个super()方法 38 } 39 }
B:抽象关键字abstract不可以和哪些关键字共存?
private
私有的,外部直接无法访问。子类也同样无法访问
abstrac
修饰的方法就是为了让子类继承并重写的
static
那么这个时候抽象方法就可以可以通过类名调用,但是这样是没有意义的。
final
修饰的方法不能被重写。所以它和abstract冲突。
C:抽象类中可不可以没有抽象方法?
可以。如果这么做只有一个目的不让你创建这个类的对象
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------