java抽_Java抽象类

本文通过示例介绍了Java中抽象类和抽象方法的概念及其应用。平面图形类作为抽象类,包含抽象方法求面积和周长,其子类如矩形、圆形等实现了这些方法。此外,还展示了抽象类不能实例化但可以作为引用类型来调用子类方法的特性,并通过宠物类和主人类的例子说明了抽象类在多态中的作用。
摘要由CSDN通过智能技术生成

Java抽象类

把所有的三角形抽象类三角形类, 把所有的圆形抽象为圆形类,把所有的矩形抽象为矩形类, 把所有的三角形/圆形/矩形等所有平面图形抽象为平面图形类。

在平面图形类, 可以进行对平面图形求面积/求周长等操作, 但是不同的图形有不同的求法, 在平面图形类中, 求面积/求周长的操作没法具体实现. 就像所有的动物都会动, 不同的动物动的方式不同,动物类有这个操作,也没法具体实现。

当一个类的某个操作没法具体实现时,这个操作可以定义为抽象方法。

抽象方法使用abstract修饰的方法,只有方法的声明部分,没有方法体。

package com.wkcto.chapter01.abstracttest.demo01;

/**

* 定义平面图形 类

* 该类有对平面图形求面积,求周长的操作

*

* 1) 当一个类的某个操作没法具体实现时, 这个操作可以定义为抽象方法

* 2) 使用abstract修饰的方法为抽象方法, 只有方法的声明,没有方法体

* 3) 含有抽象方法的类必须定义为抽象类

* @author 蛙课网

*

*/

public abstract class Graphics2d {

//定义抽象方法,求面积

public abstract double getArea();

//定义抽象方法,求周长

public abstract double getPerimeter();

}

package com.wkcto.chapter01.abstracttest.demo01;

/**

* 定义矩形类

*

* 1) 子类继承了抽象类, 需要在子类中重写抽象类的抽象方法

* @author 蛙课网

*

*/

public class Rectangle extends Graphics2d {

int width;

int height;

public Rectangle(int width, int height) {

super();

this.width = width;

this.height = height;

}

@Override

public double getArea() {

return width*height;

}

@Override

public double getPerimeter() {

return 2*(width+height);

}

}

package com.wkcto.chapter01.abstracttest.demo01;

/**

* 测试类,

* 定义一个方法,可以显示任意平面图形的面积与周长

* @author 蛙课网

*

*/

public class Test {

public static void main(String[] args) {

//创建矩形 对象

Rectangle rect = new Rectangle(10, 5);

//方法的形参graphics2d是一个父类引用,在调用方法时, 可以传递子类对象

showInfo(rect);

//创建圆形对象

Circle c1 = new Circle(10);

showInfo(c1);

}

//定义一个方法,可以显示任意平面图形的面积与周长

public static void showInfo( Graphics2d graphics2d) {

System.out.println("平面图形的信息------------------");

System.out.println("面积:" + graphics2d.getArea());

System.out.println( "周长:" + graphics2d.getPerimeter());

}

}

package com.wkcto.chapter01.abstracttest.demo01;

/**

* 定义三角形类

* 如果子类继承了抽象类, 没有重写所有的抽象方法,那么子类也需要定义为抽象类

* @author 蛙课网

*

*/

public abstract class Triangle extends Graphics2d {

int a;

int b;

int c;

@Override

public double getPerimeter() {

return a+b+c;

}

}

package com.wkcto.chapter01.abstracttest.demo01;

/**

* 测试抽象类的特点:

* 1) 只要使用abtract修饰的类就是抽象类

* 2) 含有抽象方法的类必须定义 为抽象类,但是,抽象类中不一定含有抽象方法

* 有时,对现有的类进一步抽象形成更高层级的类(更抽象的类),如食物类,动物类, 它们是没法实例化,这种情况下,可以定义为抽象类

* 3) 抽象类是一种引用数据类型, 可以定义变量, 但是抽象类不能实例化对象,

* 抽象类定义引用可以赋值子类对象

* 4) 抽象类肯定含有构造方法, 子类创建对象时调用子类构造方法,子类构造方法体执行前会先执行父类的构造方法

* 5) abstract与final不能同时使用

* @author 蛙课网

*

*/

public class Test02 {

public static void main(String[] args) {

//使用抽象类定义一个变量

Graphics2d graphics2d;

//graphics2d = new Graphics2d();;//Cannot instantiate the type Graphics2d

Rectangle rectangle = new Rectangle(10, 5);

//抽象类引用可以赋值子类对象

graphics2d = rectangle;

graphics2d = new Rectangle(5, 2);

}

}

练习: 主人喂养宠物,宠物就卖萌

package com.wkcto.chapter01.abstracttest.demo02;

/**

* 宠物类

* 卖萌

* @author 蛙课网

*

*/

public abstract class Pet {

//卖萌

public abstract void sellMeng() ;

}

package com.wkcto.chapter01.abstracttest.demo02;

/**

* 小狗是宠物

* @author 蛙课网

*

*/

public class Dog extends Pet {

@Override

public void sellMeng() {

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

}

}

package com.wkcto.chapter01.abstracttest.demo02;

/**

* 主人类

* @author 蛙课网

*

*/

public class Master {

//喂宠物

public void feed( Pet pet) {

//宠物卖萌

pet.sellMeng();

}

}

package com.wkcto.chapter01.abstracttest.demo02;

/**

* 测试主人喂宠物,宠物就卖萌

* @author 蛙课网

*

*/

public class Test {

public static void main(String[] args) {

Master xiaoxi = new Master();

Dog dog = new Dog();

xiaoxi.feed(dog);

Cat cat = new Cat();

xiaoxi.feed(cat);

}

}

练习:

愤怒的小鸟, 红火(红颜色的鸟)可以正常飞行 , 蓝冰(蓝颜色的鸟)可以一个变三个, 黄风(黄颜色的鸟)可以加速飞行,  定义一个弹弓类,有一个弹射的方法 ,可以把鸟给射出去, 鸟在飞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值