java写一个短的抽象类_java入门(二十四) | OOP(十一)之抽象类

本文详细介绍了Java中的抽象类概念,包括抽象类的特点、如何使用抽象类以及抽象类在多态中的应用。并通过具体示例展示了抽象类的定义、继承及重写等关键操作。

抽象类

1.1 概念

Java中可以定义没有方法体的方法,该方法由其子类来具体的实现。

该没有方法体的方法我们称之为抽象方法。

含有抽象方法的类我们称之为抽象类。

抽象类可以理解为是一个只有方法声明没有方法体的特殊类。

abstract 修饰符 返回值 方法名(参数列表);

抽象的 class Animal{

抽象的 public void eat();//父类方法体提供了显得多余,那就不提供方法体,没有方法体的方法 -- 抽象方法

}

class Cat extends Animal{

@Override

public void eat(){

syso("猫吃鱼");

}

}

class Dog extends Animal {

}

1.2 特点

通过java关键字abstract实现

可以修饰方法或者类

抽象类中可以没有抽象方法(由子类去实现)

如果类中有抽象方法,那该类必须定义为一个抽象类

子类继承了抽象类以后,要么还是一个抽象类,要么就把所有抽象方法都重写

多用于多态中

抽象类不可以被实例化

1.3 入门案例

package cn.qile.abstractdemo;

//测试抽象类入门案例

public class Test1_Abstract {

public static void main(String[] args) {

//5、抽象类不能被实例化new

// Student s = new Student();

// s.eat();s.sleep();

//TODO 创建多态对象测试

Person p = new Teacher();//父类的引用指向子类的对象

//编译看左边,运行看右边

p.eat();

p.game();

p.sleep();

}

}

//创建抽象类

//3、如果一个 类中 包含抽象方法 -- 这个类必须是一个抽象类,用abstract修饰

abstract class Person{

//1、父类中的方法体没必要提供时,这个方法就是没有方法体的方法 叫 抽象方法

//2、用关键字abstract修饰抽象的

abstract public void eat();

abstract public void game();

public void sleep() {

System.out.println("睡觉");

}

}

//创建子类

//4、子类如果继承了抽象类,子类如果只不重写,或者只重写一部分,那子类仍然是抽象类

abstract class Student extends Person{

//TODO 重写eat()

public void eat() {

System.out.println("吃菜");

}

}

//4.1、子类如果继承了抽象类,要把所有抽象方法都重写 变成 普通子类

class Teacher extends Person{

public void eat() {

System.out.println("不吃");

}

public void game() {

System.out.println("不玩");

}

}

抽象类的用法

2.1 构造函数

常用于子类的实例化

package cn.qile.abstractdemo;

//抽象类的用法

public class Test2_UseAbstract {

public static void main(String[] args) {

//TODO 创建多态对象测试

Animal a = new Dog();

}

}

//创建父类

abstract class Animal{

//抽象类提供构造方法:不是为了创建抽象类的对象(也不能创建),而是为了创建子类对象

public Animal() {

System.out.println("构造方法");

}

}

//创建子类

class Dog extends Animal{

public Dog() {

super();//默认就有

}

}

2.2 成员变量

既可以有变量,也可以有常量。

package cn.qile.abstractdemo;

//抽象类的用法

public class Test2_UseAbstract {

public static void main(String[] args) {

//TODO 创建多态对象测试

Animal a = new Dog();

}

}

//创建父类

abstract class Animal{

//提供构造方法:不是为了创建抽象类的对象,而是为了创建子类对象

public Animal() {

System.out.println("构造方法");

}

int sum ;//抽象类中可以写变量

final int count = 10;//抽象类中可以写常量

}

//创建子类

class Dog extends Animal{

public Dog() {

super();//默认就有

}

}

2.3 成员方法

抽象类里,既可以有普通方法,有可以有抽象方法。

package cn.qile.abstractdemo;

//抽象类的用法

public class Test3_UseAbstract {

public static void main(String[] args) {

//创建多态对象测试

Animal a = new Dog();

System.out.println(a.count);

System.out.println(a.sum);

a.sleep();

a.eat();

a.jiao();

}

}

//创建父类

//1、抽象类中可以有 抽象方法 也可以有 普通方法

abstract class Animal{

//提供构造方法:不是为了创建抽象类的对象,而是为了创建子类对象

public Animal() {

System.out.println("构造方法");

}

int sum ;//抽象类中可以写变量

final int count = 10;//抽象类中可以写常量

public abstract void eat();

public abstract void jiao();

public void sleep() {

System.out.println(sum);//0

System.out.println("正在睡觉");

}

}

//创建子类

class Dog extends Animal{

public Dog() {

super();//默认就有

}

//2、抽象类中如果有抽象方法,子类继承后,必须全都重写,否则子类就是抽象类

@Override

public void eat() {

System.out.println("狗吃肉");

}

@Override

public void jiao() {

System.out.println("汪汪汪");

}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值