黑马程序员技术交流社区
标题: Java面向对象之抽象类 [打印本页]
作者: 小詹 时间: 2018-4-5 22:51
标题: Java面向对象之抽象类
Java抽象类
抽象类:在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
有abstract修饰的类是抽象类。
有抽象方法的类必须是抽象类。
如果一个类里有抽象方法,这个类的子类必须重写所有的抽象方法。除非这个子类也是抽象类。
格式:抽象类就是多了一个abstract来修饰
格式举例:
abstract class Animal {
public abstract void eat();
public void run() {
}
}
抽象方法:
不同子类的方法是相似,但是具体内容又不太一样,所以我们只能在父类中抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法
格式:抽象方法就是把方法用abstract修饰,去掉方法的{}用分号代替。
格式举例:
public abstract void eat();
抽象类的特点
抽象方法只能在抽象类里面
抽象类中可以没有抽象方法
抽象类和抽象方法必须被abstract修饰
抽象类不能创建对象(不能实例化)
抽象类中可以有非抽象的方法
抽象类和类的关系也是继承
一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类
抽象类的成员特点
成员变量
可以有成员变量
可以有常量
成员方法
可以有抽象方法
可以有非抽象方法
构造方法
可以有构造方法的,因为需要对抽象类的成员变量进行初始化(理解:虽然抽象类不能直接创建对象。但是我们写抽象类一般是写一个子类去继承抽象类,子类的构造方法会调用父类的构造,所以抽象类肯定也有构造方法。)
package com.itheima_04;
/*
* 分析:从具体到抽象
* 实现:从抽象到具体
* 使用:使用的是具体的类的对象
*
* 分析:
* package com.itheima_04;
/*
* 分析:从具体到抽象
* 实现:从抽象到具体
* 使用:使用的是具体的类的对象
*
* 分析:
* 基础班老师:
* 成员变量:name,age
* 构造方法:无参,带参
* 成员方法:getXxx(),setXxx(),teach(){}
* 就业班老师:
* 成员变量:name,age
* 构造方法:无参,带参
* 成员方法:getXxx(),setXxx(),teach(){}
*
* 抽象的老师类:
* 成员变量:name,age
* 构造方法:无参,带参
* 成员方法:getXxx(),setXxx(),teach();
*/
public class TeacherDemo {
public static void main(String[] args) {
//使用的是具体的类的对象
//BasicTeacher
//多态形式的测试
Teacher t = new BasicTeacher();
t.setName("林青霞");
t.setAge(30);
System.out.println(t.getName()+"---"+t.getAge());
t.teach();
System.out.println("---------------------------");
t = new BasicTeacher("林青霞", 30);
System.out.println(t.getName()+"---"+t.getAge());
t.teach();
}
} 基础班老师:
* 成员变量:name,age
* 构造方法:无参,带参
* 成员方法:getXxx(),setXxx(),teach(){}
* 就业班老师:
* 成员变量:name,age
* 构造方法:无参,带参
* 成员方法:getXxx(),setXxx(),teach(){}
*
* 抽象的老师类:
* 成员变量:name,age
* 构造方法:无参,带参
* 成员方法:getXxx(),setXxx(),teach();
*/
public class TeacherDemo {
public static void main(String[] args) {
//使用的是具体的类的对象
//BasicTeacher
//多态形式的测试
Teacher t = new BasicTeacher();
t.setName("林青霞");
t.setAge(30);
System.out.println(t.getName()+"---"+t.getAge());
t.teach();
System.out.println("---------------------------");
t = new BasicTeacher("林青霞", 30);
System.out.println(t.getName()+"---"+t.getAge());
t.teach();
}
}
package com.itheima_04;
//就业班老师
public class WorkTeacher extends Teacher {
public WorkTeacher() {}
public WorkTeacher(String name,int age) {
super(name,age);
}
@Override
public void teach() {
System.out.println("就业班老师讲解JavaEE的内容");
}
}
package com.itheima_04;
//基础班老师
public class BasicTeacher extends Teacher {
public BasicTeacher() {}
public BasicTeacher(String name,int age) {
super(name,age);
}
@Override
public void teach() {
System.out.println("基础班老师讲解JavaSE的内容");
}
}
package com.itheima_04;
//抽象的老师类
public abstract class Teacher {
private String name;
private int age;
public Teacher() {}
public Teacher(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//抽象方法
public abstract void teach();
}
总结:普通类有的抽象类都有,只不过抽象类比普通类多了一个abstract修饰,并且里面可能有抽象方法。
作者: 小浙姐姐 时间: 2018-4-10 17:23
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |