欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java抽象类教程-动力节点

程序员文章站 2022-06-16 17:05:16
...

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

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

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

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

package com.wkcto.chapter01.abstracttest.demo01;
/**

  • 定义平面图形 类
  •  该类有对平面图形求面积,求周长的操作
    
    1. 当一个类的某个操作没法具体实现时, 这个操作可以定义为抽象方法
    1. 使用abstract修饰的方法为抽象方法, 只有方法的声明,没有方法体
    1. 含有抽象方法的类必须定义为抽象类
  • @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修饰的类就是抽象类
    1. 含有抽象方法的类必须定义 为抽象类,但是,抽象类中不一定含有抽象方法
  •  有时,对现有的类进一步抽象形成更高层级的类(更抽象的类),如食物类,动物类, 它们是没法实例化,这种情况下,可以定义为抽象类
    
    1. 抽象类是一种引用数据类型, 可以定义变量, 但是抽象类不能实例化对象,
  •  抽象类定义引用可以赋值子类对象
    
    1. 抽象类肯定含有构造方法, 子类创建对象时调用子类构造方法,子类构造方法体执行前会先执行父类的构造方法
    1. 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);
}

}

练习:

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

相关标签: 抽象类