抽象

1.抽象的概念

图形一定可以计算面积,但是计算面积方法不确定;动物一定要吃东西,但是吃东西的方法不确定。

2.抽象方法和抽象类的格式、使用

package Demo2301;/*
* 抽象方法,就是加上abstract关键字,然后去掉大括号,直接分号结束
* 抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。
*
* 如何使用抽象类和抽象方法:
* 1.不能直接创建new抽象类对象。
* 2.必须用一个子类来继承抽象父类。
* 3.子类必须覆盖重写抽象父类当中所有的抽象方法。
* 覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。
* 4.创建子类对象进行使用。
*
* 注意事项:
* 抽象方法中不一定只有抽象类,但抽象类必须要在抽象方法中。
* */public abstract class Animal {//这是一个抽象方法:代表吃东西,但是具体吃什么(大括号的内容)不确定。public abstract void eat();//    public void nomalMethod(){//
//    }
}
package Demo2301;public class Cat extends Animal{@Overridepublic void eat(){System.out.println("猫吃鱼");}
}
package Demo2301;public class Dog extends Animal{public void eat(){System.out.println("狗吃骨头");}
}
package Demo2301;public class DemoMain {public static void main(String[] args) {//Animal animal = new Animal();//错误写法Cat cat = new Cat();cat.eat();Dog dog = new Dog();dog.eat();}
}

3.抽象方法和抽象类的注意事项

对于第2点:抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

package Demo2302;public abstract class Fu {public Fu() {System.out.println("抽象父类的构造方法执行");}public abstract void eat();
}
package Demo2302;public class Zi extends Fu {public Zi() {//super();System.out.println("子类构造方法执行");}@Overridepublic void eat() {System.out.println("吃饭");}
}
package Demo2302;/*不可以直接new父类,想要执行父类的构造方法,*只能通过new子类,通过子类构造方法自带隐藏的super()进行调用*/public class DemoMain02 {public static void main(String[] args) {Zi zi = new Zi();zi.eat();}
}
//抽象父类的构造方法执行
//子类构造方法执行
//吃饭

3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

package Demo2302;/*
* 一个抽象类不一定含有抽象方法,
* 只要保证抽象方法所在的类是抽象类,即可。
* 这样没有抽象方法的抽象类,也不能直接创建对象,在一些特殊场景下有用途。
* */public class MyAbstract {}

4.抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非从该子类也是抽象类。

对于第四点,有以下:

爷爷辈:

package Demo2303;public abstract class Animal {public abstract void eat();public abstract void drink();
}

爸爸辈:

package Demo2303;/*
* 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。
* 除非该子类也是抽象类:只重写一个方法,但需要在dog的class前面加abstract。这里的Dog就是
* */
//没有重写父类中的所有方法,所以需要加上abstract
public abstract class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃饭了");}
}

孙子辈:

package Demo2303;
//抽象类的子类,必须重写抽象父类中所有的抽象方法public class DogGolden extends Dog{@Overridepublic void drink() {System.out.println("金毛喝水了");}
}
package Demo2303;//抽象类的子类,必须重写抽象父类中所有的抽象方法public class Dog2Ha extends Dog{@Overridepublic void drink() {System.out.println("二哈喝水了");}
}

main方法:

package Demo2303;public class DemoMain03 {public static void main(String[] args) {//Animal animal = new Animal();//错误,抽象类//Dog dog = new Dog();//错误,抽象类DogGolden dogGolden = new DogGolden();//这是普通类,可以直接new对象dogGolden.drink();dogGolden.eat();Dog2Ha dog2Ha = new Dog2Ha();dog2Ha.drink();dog2Ha.eat();}
}

第23天学习Java的笔记-抽象类相关推荐

  1. 深入学习Java虚拟机笔记

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.走进Java 1.4.2 HotSpot VM 1.4.4 BEA JRockit/IBM J9 VM 1.6.1 ...

  2. 第18天学习Java的笔记-ArrayList

    还有31天! 对象数组 package Demo1801;public class Person {private String name;private int age;public Person( ...

  3. 第24天学习Java的笔记-接口Interface

    接口 1.接口概述与生活举例 2.接口的定义基本格式.接口的抽象方法定义及使用 接口使用步骤: 1.接口不能直接使用,必须有一个"实现类"来"实现"该接口. 格 ...

  4. 第21天学习Java的笔记-数学工具类Arrays,Math

    27天! 数学工具类 1.1数组工具类Arrays package Demo2101;/* 注意事项:是Arrays进行调用,不是变量进行调用!!!* java.util.Arrays是一个与数组相关 ...

  5. 第19天学习Java的笔记-String字符串

    29天! 字符串 1.字符串概述和特点.构造方法和直接创建 package Demo1901;/* * java.lang.String类代表字符串. * API当中说,Java程序中的所有字符串字面 ...

  6. 第15天学习Java的笔记(封装性,this,构造方法)

    还有35天! 面向对象三大特征之封装性 package Demo1501;/** 面向对象三大特征:封装.继承.多态** 封装性在Java中的体现:* 1.方法就是一种封装* 2.关键字private ...

  7. 第22天学习Java的笔记-继承

    继承 1.继承的概述 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c1ocRigI-1608862409653)(F:\Java\Learn\day15\day22. ...

  8. 第20天学习Java的笔记-static静态

    28天 静态static关键字 1.概述 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1rR1rotO-1608259503514)(F:\Java\Learn\da ...

  9. 第17天学习Java的笔记(匿名对象,随机数,猜数字小游戏)

    33天! 匿名对象 package Demo1701;public class Person {String name;public void showName() {System.out.print ...

最新文章

  1. CSS里面position:relative与position:absolute 区别
  2. Tensorflow【实战Google深度学习框架】预训练与微调含代码(看不懂你来打我)
  3. 我的世界java1.15.2光影_快去打卡吧!海南首个“360光影馆”落户三亚
  4. 如何下载一个物种的全部EST序列 | NCBI | 表达序列标签
  5. 安装后jdk1.8 配置环境变量以后 版本显示还是1.7
  6. 【AVR ASF4库函数学习笔记】二、GPIO
  7. Docker 方式安装 Nexus 私服
  8. C#LeetCode刷题-脑筋急转弯
  9. 使用TargetSources
  10. RabbitMQ常用操作命令和入门案例(一对一的简单模式)
  11. https跳转到http session丢失问题
  12. 通过IP获取相应所在地的地址
  13. 多窗口下的批量操作脚本 - 利用win32gui和WindowSpy++简单实现目标窗口前置
  14. Spring常用注解详解大全(建议收藏)
  15. 毕业设计实战:单片机智能温控风扇设计 带智能调速人体感应 论文仿真 源码 原理图
  16. 智能电视大战背后的秘密
  17. 输入一个字符串求出其中逆序数对
  18. 中国科学院计算机技术研究院,赵屹(中国科学院计算技术研究所研究员)_百度百科...
  19. 稀疏表征:稀疏字典构建
  20. 计算机为什么有网络凭证,Win10访问局域网中计算机共享文件显示需要网络凭证怎么办?...

热门文章

  1. 树莓派nginx无法安装mysql_树莓派上安装nginx
  2. 2021.12.15
  3. [CH Round #61] 取数游戏
  4. hdu4096(模拟)
  5. 【五校联考6day2】yi
  6. 欧几里得空间——度量矩阵
  7. git 改了一段代码不想要了_初识Git
  8. mysql5.6.24配置日志_windows下mysql5.6.x的日志正确配置方法(my.ini) (网上的都是5.6之前的版本)...
  9. python websocket server_Python Websocket服务端
  10. 操作系统及编程语言历史以及shell命令