当前位置:网站首页>抽象类与抽象方法
抽象类与抽象方法
2022-07-06 10:47:00 【青年要奋斗】
抽象类与抽象方法
在java中,抽象类不能产生对象实例。定义抽象时,需要使用abstract关键字,语法:
[权限修饰符] abstract class 类名 {
类体
}
使用abstract定义的类被称为抽象类,使用abstract定义的方法被称为抽象方法,语法:
[权限修饰符] abstract 方法返回值类型 方法名(参数列表);
实例:使用抽象类模拟“去商场买衣服”场景
定义Market类
public abstract class Market {
public String name; // 商场名称
public String goods; // 商品名称
public abstract void shop(); // 抽象方法,用来输出信息
}
定义TaobaoMarket类
public class TaobaoMarket extends Market {
public void shop() {
System.out.println(name + "网购" + goods);
}
}
定义WallMarket类
public class WallMarket extends Market {
public void shop() {
System.out.println(name + "实体店购买" + goods);
}
}
定义GoShopping类
public class GoShopping {
public static void main(String[] args) {
Market market = new WallMarket(); // 使用派生类对象创建抽象类对象
market.name = "沃尔玛";
market.goods = "七匹狼西服";
market.shop();
market = new TaobaoMarket(); // 使用派生类对象创建抽象类对象
market.name = "淘宝";
market.goods = "韩都衣舍花裙";
market.shop();
}
}
运行结果如下:
沃尔玛实体店购买七匹狼西服
淘宝网购韩都衣舍花裙
Process finished with exit code 0
父类对象new子类对象
Animal b = new Dog();
如上,对象b调用属性的时候调用父类属性,将对象b调用方法的时候调用子类的方法。
class Animal{
}
class Dog extends Animal{
}
public class Test4 {
public static void main(String[] args) {
Animal a = new Animal();
Animal b = new Dog();
System.out.println(a instanceof Animal);
System.out.println(a.getClass());
System.out.println(b.getClass());
//先用的子类的方法所以调用的是子类的getClass
System.out.println(a.getClass() .equals(b.getClass()));
}
}
Dog b = new Dog();
Animal b = new Dog();
结果一样的,但是有区别的,看看使用抽象类模拟“去商场买衣服”场景,如果将Market market = new WallMarket();
改成WallMarket market = new WallMarket();
,编译器会报错,记住:此父类有两个子类。
再举个例子
定义一个demo1类:
package Demo;
public class demo1 {
public static void main(String[] args) {
Teacher Li = new English();
Teacher Yang = new Math();
Li.teaching();
Yang.teaching();
}
}
定义一个Teacher类
package Demo;
public abstract class Teacher{
//抽象类
abstract public void teaching(); //抽象方法
}
class Math extends Teacher{
@Override
public void teaching() {
System.out.println("我们讲三角函数!");
}
}
class English extends Teacher{
@Override
public void teaching() {
System.out.println("Good morning class!");
}
}
运行结果如下:
Good morning class!
我们讲三角函数!
Process finished with exit code 0
注意:抽象类是不能实例化的!
Teacher Li = new Teacher(); //错误的写法!
报错的结果如下
java: Demo.Teacher是抽象的; 无法实例化
知道抽象类有什么用的!
边栏推荐
- Penetration test information collection - WAF identification
- 基于ppg和fft神经网络的光学血压估计【翻译】
- Some understandings of tree LSTM and DGL code implementation
- Stm32+esp8266+mqtt protocol connects onenet IOT platform
- 44所高校入选!分布式智能计算项目名单公示
- CSRF漏洞分析
- Collection of penetration test information -- use with nmap and other tools
- Interpreting cloud native technology
- Epoll () whether it involves wait queue analysis
- 具体说明 Flume介绍、安装和配置
猜你喜欢
Coco2017 dataset usage (brief introduction)
线代笔记....
Why does wechat use SQLite to save chat records?
Self supervised heterogeneous graph neural network with CO comparative learning
SQL injection - access injection, access offset injection
Grafana 9.0 is officially released! It's the strongest!
Use cpolar to build a business website (1)
被疫情占据的上半年,你还好么?| 2022年中总结
ORACLE进阶(四)表连接讲解
2022-2024年CIFAR Azrieli全球学者名单公布,18位青年学者加入6个研究项目
随机推荐
巨杉数据库首批入选金融信创解决方案!
There is a sound prompt when inserting a USB flash disk under win10 system, but the drive letter is not displayed
2022/02/12
Crawling data encounters single point login problem
重磅硬核 | 一文聊透对象在 JVM 中的内存布局,以及内存对齐和压缩指针的原理及应用
Atcoder a mountaineer
AFNetworking框架_上传文件或图像server
STM32+ESP8266+MQTT协议连接OneNet物联网平台
测试123
287. Find duplicates
CRMEB 商城系统如何助力营销?
首先看K一个难看的数字
2022 Summer Project Training (III)
[swoole series 2.1] run the swoole first
This article discusses the memory layout of objects in the JVM, as well as the principle and application of memory alignment and compression pointer
Reprint: defect detection technology of industrial components based on deep learning
UFIDA OA vulnerability learning - ncfindweb directory traversal vulnerability
Top command details
Alibaba cloud international ECS cannot log in to the pagoda panel console
How does crmeb mall system help marketing?