【济南校区】java基础-抽象类 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体。 但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。比如一个图形类应该有一个求周长的方法,但是不同的图形求周长的算法不一样。那该怎么办呢? 分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方法功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。 案例代码:[Java] 纯文本查看 复制代码 package com.itheima_01;
/*
* abstract:关键字,用于修饰方法和类
* 抽象方法:不同类的方法是相似,但是具体内容又不太一样,所以我们只能抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法
* 抽象类:有抽象方法的类必须是抽象类
*
* 注意:一个类继承了抽象类需要重写他所有的抽象方法,否则这个类就得是抽象类
*/
public class AbstractDemo {
}
abstract class Animal1 {
public abstract void eat();
//非抽象方法子类可以不重写
public void run() {
}
}
class Cat1 extends Animal1 {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
/*public void eat() {
System.out.println("猫吃鱼");
}*/
}
abstract class Dog1 extends Animal1 {
/*public void eat() {
System.out.println("狗吃屎");
}*/
}
抽象类的特点 抽象类的特点: 抽象方法只能在抽象类里面 抽象类和抽象方法必须被abstract修饰 抽象类不能创建对象(不能实例化) 抽象类中可以有非抽象的方法 抽象类和类的关系也是继承 一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类 案例代码[Java] 纯文本查看 复制代码 package com.itheima_01;
/*
* 抽象类的特点:
* 抽象方法只能在抽象类里面
* 抽象类和抽象方法必须被abstract修饰
* 抽象类不能创建对象(不能实例化)
* 抽象类中可以有非抽象的方法
* 抽象类和类的关系也是继承
* 一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类
*/
public class AbstractDemo2 {
public static void main(String[] args) {
//Animal a = new Animal();
}
}
abstract class Animal2 {
public abstract void eat();
public void run() {
}
}
class Cat2 extends Animal2 {
@Override
public void eat() {
// TODO Auto-generated method stub
}
} 抽象类的成员的特点A:抽象类的成员特点: 成员变量 可以有成员变量 可以有常量 成员方法 可以有抽象方法 可以有非抽象方法 构造方法 可以有构造方法的,需要对抽象类的成员变量进行初始化 案例代码[Java] 纯文本查看 复制代码 package com.itheima_01;
/*
* 抽象类的成员特点:
* 成员变量
* 可以有成员变量
* 可以有常量
* 成员方法
* 可以有抽象方法
* 可以有非抽象方法
* 构造方法
* 可以有构造方法的,需要对抽象类的成员变量进行初始化
*
* final:修饰类、成员变量、成员方法
*/
public class AbstractDemo3 {
public static void main(String[] args) {
Dog d = new Dog();
d.barking();
}
}
abstract class Animal {
String name = "哮天犬";
final int num = 10;
public Animal() {
System.out.println("我是抽象类的构造方法");
}
public abstract void eat();
public void run() {}
}
class Dog extends Animal {
public void barking() {
System.out.println(name);
System.out.println(num);
}
@Override
public void eat() {
// TODO Auto-generated method stub
}
} 抽象类案例老师案例: 老师类: 属性:姓名,年龄,性别 行为:讲课 基础班老师: 属性:姓名,年龄,性别 行为:讲基础班课程 就业班老师: 属性:姓名,年龄,性别 行为:讲就业班课程 案例代码 [Java] 纯文本查看 复制代码 package com.itheima_02;[/size][/font][/align][font=微软雅黑][size=3]
/*
* 基础班老湿,就业班老湿
*
* 共性:
* 属性 姓名,年龄,性别
* 行为 讲课,唱歌
*/
public class AbstractTest {
public static void main(String[] args) {
BasicTeacher bt = new BasicTeacher();
bt.name = "风清扬";
bt.teach();
JobTeacher jt = new JobTeacher();
jt.name = "苍老师";
jt.teach();
}
}
abstract class Teacher {
String name;//姓名
int age;//年龄
String gender;//性别
//讲课
public abstract void teach();
}
class BasicTeacher extends Teacher {
@Override
public void teach() {
System.out.println(name + "讲基础班课程");
}
}
class JobTeacher extends Teacher {
@Override
public void teach() {
System.out.println(name + "讲就业班课程");
}
}
如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
黑马程序员济南中心联系电话:0531-55696830
|