java中抽象类和抽象方法

文章目录

前言

一、抽象类和抽象方法是什么?

1.抽象类

2.抽象方法

二、使用方法

1.实操展示

2.注意事项

总结


前言

        苹果这个具体的水果,它具有的属性为,红色;它具有的方法为,被啃。那么,水果,这个定义,不知阁下又该如何应对?很明显,这是一个抽象的概念,是苹果、香蕉、桃子......的集合,而水果具备的方法,被吃,又该如何描述?是像苹果一样直接啃,核扔掉?还是像香蕉一样拨开皮,吃掉里面的果肉?在java中,可以将苹果视为一个类,水果这种抽象的概念即为抽象类;苹果这个类中,方法,被啃,可以具体执行。水果这个抽象类,方法,被吃,无法具体执行,怎么吃?啃?剥皮?切开?被吃,这个抽象类中的方法即为抽象方法


一、抽象类和抽象方法是什么?

1.抽象类

        抽象类:如颜色,名字,动物,食物等一类事物的总称,不具体的概念,皆可创建为抽象类

                abstract 关键字 将普通类转换为抽象类

               语法:public abstract class 抽象类名{}

package projectMy;

public abstract class Animal{
    //创建了一个抽象类 Animal类
    //some codes
}

2.抽象方法

        抽象方法:例如繁衍,描述形状,计算面积等一类行为的总称,不具体的行为,皆可创建为抽象方法

                abstract 关键字 将成员方法转换为抽象方法 

                语法:abstract void 方法名();

package projectMy;

public abstract class Animal {
	abstract void breed();
    //创建了抽象方法 breed()方法
}

二、使用方法

1.实操展示

        代码构架:

        (1)创建抽象类 Animal类,创建breed(),feed(),move()抽象方法以及name()方法

package projectMy;

public abstract class Animal {
	abstract void breed();
    //繁衍方法
	abstract void feed();
    //获食方法
	abstract void move();
	//移动方法

	String name() {
		return "类别:动物界";
	}
}

         (2)创建抽象类 Bird类,继承 Animal抽象类,实现breed(),move()方法,补充name()方法

package projectMy;

public abstract class Bird extends Animal{
	void breed() {
        //覆写实现了父类的breed()抽象方法
		System.out.println("繁殖方式:卵生");
	}
	
	void move() {
        //覆写实现了父类的move()抽象方法
		System.out.println("移动方式:飞翔");
	}
	
	abstract void feed();   
	//不写父类的抽象方法也不会报错,写了是方便记忆,防止遗忘了这个方法

	String name() {
        //补充父类的name()方法
		return super.name()+"鸟类";
	}
}

        (3)创建 Eagle 类,继承 Bird抽象类,实现feed()方法,补充name()方法,创建main方法

package projectMy;

public class Eagle extends Bird{
	void feed() {
        //覆写了父类的feed()抽象方法
		System.out.println("获食方法:捕猎");
	}
	
	String name(){
        //补充了父类的name()方法
		return super.name()+"鹰形目鹰科";
	}
	
	public static void main(String[] args) {
		Eagle eagle = new Eagle();
		//调用父类覆写的方法,和本类实现父类后的方法
		System.out.println("鹰");
		System.out.println(eagle.name());
		eagle.breed();
		eagle.feed();
		eagle.move();
		
	}
}

        输出结果:  

        (4)创建 Dove类,继承 Bird抽象类,实现feed()方法,补充name()方法,创建main方法

package projectMy;

public class Dove extends Bird{
	void feed() {
        //覆写了父类的feed()抽象方法
		System.out.println("获食方法:采集");
	}
	
	String name() {
        //补充了父类的name()方法
		return super.name()+"鸽形目鸠鸽科";
	}
	
	public static void main(String[] args) {
		Dove dove = new Dove();
		//调用父类覆写的方法,和本类实现父类后的方法
		System.out.println("鸽子");
		System.out.println(dove.name());
		dove.breed();
		dove.feed();
		dove.move();
	}
}

        输出结果: 

         总结:

        创建了两个抽象类。

                Animal类,动物类,创建了抽象方法,繁衍,获食,移动,三个抽象行为

                Bird类,鸟类,继承了Animal类,将繁衍,移动,两个父类的抽象方法,具体为了鸟类的行为,即“产卵”,  “飞翔”。抽象方法,获食,仍需具体为什么鸟,才能覆写为具体获食行为。

        创建了两个都继承了Bird抽象类的类

                Eagle类,鹰类,将“获食”这一抽象行为,具体为了“捕猎”

                Dove类,鸽子类,将“获食”这一抽象行为,具体为了“采集” 

         结论:      

                抽象类和抽象方法,可以实现“物品分类”的效果,例如生物分类学中的“界、门、纲、目、科、属、种”,在“界”这一类创建基本的符合生物的抽象方法,逐级根据需要增加抽象方法。所有的抽象方法,只要到了可以实现为具体行为的某一子类中,该子类即可将其实现,从而到最后一级“种”时,每个物种的信息都完整地显示出来。

                1.有利于简化代码,防止重复造车轮

                2.有利于清晰框架,防止代码逻辑混乱

2.注意事项

        抽象类:

                抽象类本身不能实例化创建本类的对象,必须通过子类向上转型

                        语法:抽象类名 对象 = new 子类();

Bird bird1 = new Eagle();
//Eagle类向上转型,赋值给了抽象类的对象 bird1,相当于创建了Bird抽象类对象

        抽象方法:

                 (1)创建抽象方法时,不需要实现,没有“{}”

abstract void feed();

                 (2)抽象方法只能在抽象类中被创建成员方法在抽象类和普通类中都可被创建

                 (3)子类继承了一个抽象父类子类必须实现这个父类中没有被实现的所有抽象方法 

                 (4)抽象子类继承了抽象父类,不必实现父类的抽象方法但建议写上没有实现的抽象方法,避免在下一个继承中,遗忘了父类的某个抽象方法

                 (5)抽象父类的抽象方法,只要被一个子类/抽象子类实现,后续继承的子类便不用再次重写该抽象方法


总结

        以上就是java中的抽象类和抽象方法,简单介绍了抽象类和抽象方法的使用,更多的用处,需要在实际项目中操作才知道,如果对“接口”这个概念不太熟悉,up会在下篇文章中帮你了解一下。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵果森森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值