当前位置:网站首页>抽象类与抽象方法
抽象类与抽象方法
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是抽象的; 无法实例化
知道抽象类有什么用的!
边栏推荐
猜你喜欢

重磅硬核 | 一文聊透对象在 JVM 中的内存布局,以及内存对齐和压缩指针的原理及应用

关于npm install 报错问题 error 1

Splay

线代笔记....
![[Matlab] Simulink 同一模块的输入输出的变量不能同名](/img/99/adfe50075010916439cd053b8f04c7.png)
[Matlab] Simulink 同一模块的输入输出的变量不能同名

手写一个的在线聊天系统(原理篇1)

【LeetCode第 300 场周赛】

Method of accessing mobile phone storage location permission under non root condition

44 colleges and universities were selected! Publicity of distributed intelligent computing project list

CSRF vulnerability analysis
随机推荐
Medical image segmentation
44所高校入选!分布式智能计算项目名单公示
Penetration test information collection - site architecture and construction
Use cpolar to build a business website (1)
Method of accessing mobile phone storage location permission under non root condition
巨杉数据库首批入选金融信创解决方案!
SQL injection Foundation
[Matlab] Simulink 同一模块的输入输出的变量不能同名
具体说明 Flume介绍、安装和配置
atcoder它A Mountaineer
2022 Summer Project Training (III)
深度循环网络长期血压预测【翻译】
UDP protocol: simple because of good nature, it is inevitable to encounter "city can play"
Xu Xiang's wife Ying Ying responded to the "stock review": she wrote it!
echart简单组件封装
STM32+MFRC522完成IC卡号读取、密码修改、数据读写
Why does wechat use SQLite to save chat records?
[swoole series 2.1] run the swoole first
Stm32+esp8266+mqtt protocol connects onenet IOT platform
Cocos2d Lua smaller and smaller sample memory game