A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

济南校区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

1 个回复

倒序浏览
我来占层楼啊   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马