什么是抽象函数,抽象类?
在java中,含有抽象方法的类称为抽象类,同样不能生成对象。
抽象类是不完整的,并且它只能用作
基类。它与非抽象类的不同:
1、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些
变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
2、允许(但不要求)抽象类包含抽象成员。
3、抽象类不能被密封。
当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员。
抽象函数的格式
1.在一个普通类中定义抽象函数?
class Home{
String where;
//1.定义一个抽象方法,编译能否通过?
abstract void gohome();
/*输出
Test.java:1: error: Home is not abstract and does not override abstract method gohome() in Home
*///说明:说明抽象方法必须声明在抽象类内
}
public class Test{
public static void main(String[] args){
}
}
抽象类的规则
- 使用abstract定义的类称为抽象类
- 抽象类不能生成对象
- 如果一个类中包含抽象函数,那么这个类必须声明为抽象类
- 一个类中没有抽象函数,也可以声明为抽象类
- 抽象类是用来当爹的,用于被继承的,他的子类可以生成对象
- 抽象类可以有构造函数,是为子类调用时候准备的
1.尝试生成抽象类的对象?
//2.尝试用抽象类生成对象
abstract class Home{
String where;
abstract void gohome();
}
public class Test{
public static void main(String[] args){
//创建抽象类对象
Home yang=new Home();
/*输出:
Test.java:14: error: Home is abstract; cannot be instantiated
Home yang=new Home();
^
1 error
*///原因:抽象类内的方法是没有方法体的(没有实现部分),假设能创建对象,那么对象调用方法肯定出错
}
}
2.通过继承再生成对象?
//2.尝试用抽象类生成对象
abstract class Home{
String where;
abstract void gohome();
}
class Myhome extends Home{
//继承了抽象函数和成员变量
/*继承以后不写抽象类的实现则不能编译通过
原则之一:有抽象类必须声明为抽象类
*/
void gohome(){
System.out.println("我回家了");
}
}
public class Test{
public static void main(String[] args){
//子类对象
Myhome yang=new Myhome();
yang.gohome();
//用对象转型输出
Home wang=new Myhome();
wang.gohome();
}
}
3.抽象类可以有构造函数吗?
//2.尝试用抽象类生成对象
abstract class Home{
String address;
abstract void gohome();
//构造函数
Home(){
System.out.println("Home类 无参构造函数");
}
Home(String address){
System.out.println("Home类 有参构造函数 我家住"+address);
}
}
class Myhome extends Home{
//继承了抽象函数和成员变量
String city;
Myhome(){
super();
System.out.println("Myhome类 无参构造函数");
}
Myhome(String city,String address){
super(address);
this.city=city;
System.out.println("Myhome 有参构造函数 我家在"+city);
}
void gohome(){
System.out.println("我回家了");
}
}
public class Test{
public static void main(String[] args){
// 创建对象
Myhome one=new Myhome();
System.out.println();
Myhome sec=new Myhome("Guangxi","Baise");
}
}
分享到:
相关推荐
此资源仅是为了配合iView-Admin正常运行而创建的Express服务端,取代了iView-Admin中原有Mock,便于和我一样的菜鸟观察iView-Admin与服务器之间的按口。 使用方法为:首先要有Express环境。下载此压缩包后先解压,...
内容是C++面对对象的,目录大致来源于菜鸟文档的C++面向对象,笔记是参考各种文章以及菜鸟文档改编的,内容包含C++类和对象(类定义和对象定义,类成员函数,类访问修饰符,友元函数,内联函数,this指针,静态成员...
-------------------------------安装方法: 本压缩包解压后上传到你的空间即可使用 管理登陆:admin/login.asp 管理ID: admin PASS : admin 相关数据库和数库链接文件 动画数据库:admin/manage/flash.asp 链接...
安装方法: 本压缩包解压后上传到你的空间即可使用 管理登陆:admin/login.asp 管理ID: admin PASS : admin 相关数据库和数库链接文件 动画数据库:admin/manage/flash.asp 链接文件:admin/manage/conn....
编程学习 1. Visual Studio Code - https://code.visualstudio.com/ 2. DCloud - HBuilder 快应 https://m.dcloud.io/ 3. access软件网-access,acc http://www.accessoft.com/Index.asp 4. Foxtable(狐表)-数据管理...
0基础学习的源码笔记(非千锋官方,本人学习时参照千锋教程写出的). 源码是在 视窗系统 xp sp3 32位,蟒蛇3.4.4 32位,pycharm社区版2016.3.6 32位环境完成的. 感谢千锋教育的开源教程 千锋教育的开源教育视频(哔哩哔哩...
java笔记-从菜鸟到j2se j2ee高手之路
20210808-银河证券-交通运输行业:菜鸟网络业绩表现持续向好,京东航空获批筹建.rar
股市菜鸟必读----“笑傲股市”学习笔记.pdf
20210808-银河证券-交通运输行业:菜鸟网络业绩表现持续向好,京东航空获批筹建.pdf
JAVA入门级笔记,满满当当适合刚学习用JAVA编程的程序员,不死记硬背靠理解走遍天下
java菜鸟学习第一步-java基础语法,学习一门语言先从语法开始学起,学好基础才能深入的学习编程
菜鸟入侵--利用资源搜索动画教程,内附有详细的使用说明 菜鸟入侵之利用资源篇 菜鸟在入侵的时候,如果能充分利用现有的资源,那将对自己的入侵起很大的
一共100多集,现把这部分贡献给大家学习交流使用。 后续教程会继续更新 希望对大家有所帮助! 【注意:如果看到文件后缀名为Z01,Z02…..Z05 ,这样的文件一定要全部下载, 并放到同一目录里解压】 精编电脑维修2013...
2010年黑客学习基地培训系列教程 菜鸟起飞的天堂 成就黑客的圣地 拥有海量的教程和软件 打造国内做大的黑客视频动画基地 http://www.hack95.com 本人唯一联系QQ:1500380791 --------------------------------...
NULL 博文链接:https://iaiiit.iteye.com/blog/1709850
本文介绍了VueJS事件处理器v-on的使用方法,分享给大家,具体如下: 事件监听可以使用 v-on 指令. v-on:click表达式 HTML: <!DOCTYPE html> <html> <head> <meta charset=utf-8> <title&...
本人刚接触C#,练练手做了个小程序,美化效果比较差,对刚学OO思想想俺一样的菜鸟或许有那么点帮助,希望大家多多指教
Python基础语法-菜鸟教程-函数⽤法:input()和raw_input() 1.input()和raw_input()⽤法 (1).input() 1)⽤法解释 def input(*args, **kwargs): # real signature unknown """ Read a string from standard input....
<!...菜鸟教程(runoob.com)</title> </head> <body> 我的第一个 JavaScript</h1> JavaScript 能够对事件作出反应。比如对按钮的点击: </p> </body> </html>