传智播客黑马Java学习笔记_09
在子类创建对象时,发现父类的构造方法也运行了,为什么呢?
在子类的构造函数中第一行有一个隐式语句super();
class Fu{Fu(){System.out.println("Fu is running");}
}class Zi extends Fu(){Zi(){//super(); 隐式语句 空参数构造函数System.out.println("Zi is running ")}
}
如果父类没有空的构造函数,子类必须用super()明确调用哪个构造函数。
一个对象实例化的过程
Person person=new Person();
- JVM会读取指定路径下的Person.class文件,并加载进内存,并会先加载父类
- 在堆内存中开辟空间,分配地址
- 并在对象空间中给成员属性默认初始化
- 调用对应的构造函数进行初始化
- 在构造函数中第一行调用的是父类的构造函数
- 父类构造函数的调用完后,对子类的属性进行显式初始化
- 在进行子类构造函数的特定初始化
- 初始化完毕后,将地址值赋给引用变量
final关键字(继承弊端,打破了封装性)
- final是一个关键字,可以修饰类,方法,变量
- final修饰的类不可以被继承
- final修饰的方法不可以被覆盖
- final修饰的变量是一个常量,只能赋值一次
为什么要用final?
其实如果一个数据是固定的,直接使用这个数据就行了,但是这样阅读性差 ,所以给该数据起个名字,且不能变化,加上final
抽象类abstract
- 方法只有声明而没有实现时,该方法是抽象方法需要用abstract修饰,抽象方法必须定义在抽象类中,该类也必须用abstract修饰
- 抽象类不可以被实例化,因为调用抽象方法没有意义
- 抽象类必须有子类覆盖其所有抽象方法后,其子类才可以实例化,否则该子类还是抽象类。
抽象类有关问题
- 抽象类中有构造方法吗?
有,给子类进行初始化
- 抽象类可以不定义抽象方法吗?
可以,但是很少见,目的就是不让该类创造对象,AWT适配器就是这种类。通常这个方法中有方法体但是没有内容
abstract class Demo{public void show(){}public void show2(){}
}
- 抽象类关键字不可以与哪些关键字使用
- private 因为抽象方法需要被覆盖
- static 抽象方法的调用没有意义
- final 抽象类需要被继承,抽象方法需要被覆盖
- 抽象类和一般类的异同点
一般类有足够的信息描述
抽象类的信息可能不足
一般类中不能定义抽象方法
抽象类中可以定义抽象方法和非抽象方法
一般类可以被实例化
抽象类不可以被实例化
抽象类继承练习
abstract class Employee{private int id;private String name;private doublie pay;Employee(int id,String name,doublie pay){this.id=id;this.name=name;this.pay=pay;}public abstract void work();
}class Programmer extends Employee{Programmer(int id,String name,doublie pay){super(id,name,pay);}public void work(){System.out.println("code...");}
}class Manager extends Employee{private double bouns;Manager (int id,String name,doublie pay,double bouns){super(id,name,pay);this.bouns= bouns;}public void work(){System.out.println("check...");}
}
接口
当一个抽象类中的所有方法都为抽象方法时,这是可以通过接口来表示。
接口中常见的成员都有固定的修饰符
全局常量 public static final
抽象方法 public abstract
接口中的成员都是公共权限
interface Demo{public static final int num=4;public abstract void show();
}
类与类之间是继承关系,类与接口之间是实现关系,接口与接口是继承关系,接口可以多继承
接口不可以实例化
只有实现了接口的子类覆盖了所有抽象方法后该子类才可以实例化,否则该子类是一个抽象类
interface Demo{public static final int num=4;public abstract void show();
}class Demo1 implements Demo{public abstract void show(){}
}
在java中不支持多继承,因为会出现不确定性,因为父类的方法都含有方法体,java进行了改良成多实现,不会出现调用的不确定性,因为接口都为抽象方法没有方法体需要实现
interface Demo1{public static final int num=4;public abstract void show();
}interface Demo2{public abstract void show();
}class Demo3 implements Demo1,Demo2{public abstract void show(){}
}
抽象类与接口的区别
1、抽象类需要被继承,只能单继承
接口需要被实现,可以多实现
2、抽象类可以定义非抽象方法,子类继承后可以使用非抽象方法
接口只能定义抽象方法
3、抽象类的继承是 is a关系,是体系中的共性内容
接口是 like关系,是体系中的额外内容(扩充)
传智播客黑马Java学习笔记_09相关推荐
- 传智播客黑马Java学习笔记_day08_2
设计模式:对问题行之有效的解决方式,一种思想,java24种 单例设计模式 解决问题:可以保证一个类的对象在内存中的唯一性 应用场景:多个程序使用同一个配置文件对象,就要保证配置文件的唯一性,配置文件 ...
- 传智播客黑马Java学习笔记_day05
遍历数组 class Demo{public static void main(String args[]){int[] arry=new int[]{87,99,56};for(int x=0;x& ...
- 传智播客黑马Java学习笔记_day10_02
对象的多态性 父类或者接口的引用指向子类对象 多态的好处 提高了代码的扩展性,前期的代码可以使用后期的内容 多态的弊端 前期的代码不能调用后期的特有内容 多态的前提 必须有关系:继承.实现 必须覆盖父 ...
- 【传智播客】Libevent学习笔记(三):事件循环
目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_l ...
- 【传智播客】Libevent学习笔记(四):事件event
目录 00. 目录 01. 事件概述 02. 创建事件 03. 事件的标志 04. 事件持久性 05. 超时事件 06. 信号事件 07. 设置不使用堆分配的事件 08. 事件的未决和非未决 09. ...
- 【传智播客】Libevent学习笔记(一):简介和安装
目录 00. 目录 01. libevent简介 02. Libevent的好处 03. Libevent的安装和测试 04. Libevent成功案例 00. 目录 @ 01. libevent简介 ...
- 传智播客.黑马程序员,学C++不再难!
众所周知,C++难.就好像博大精深的汉语比英语难,这是客观事实,我们并不否认. 但,转念想想,英语也不简单吧?从小学开始学,到了大学,挂在四六级上的同学数不胜数.可貌似没 ...
- 传智播客 传智播客.NET视频学习课件
传智播客 传智播客.NET视频学习课件 访问.NET网站了解更多课程详情 http://net.itcast.cn (小提示:为什么本书中超链接打不开?) 此套课件是伴随传智播客.net实况教学视频 ...
- 细节决定成败 – 选择传智播客成都java培训
传智播客成都Java培训中心,成立于2010年,秉承了北京传智播客"为企业优选一流好人才"的培训理念,"为学员提供高薪保证"的就业承诺!结合成都本地的优势,迅速 ...
最新文章
- 麦田在线携手网易云信,开启手机智能找房新时代
- 商城html源码_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统
- 怎么看oracle的procedure,Oracle基础 -- SQLPlus如何查看procedure的内容
- 【leetcode】数组的度-两个map关联初探
- 昆明冶金职业技术学院计算机,昆明冶金高等专科学校官网
- Java中的Ant与Maven比较整理
- 进程、lwp(轻量级进程)和Java线程的理解
- 住房公积金联名卡密码修改步骤
- PHP 阿里云OpenAPI签名[RPC 调用机制]·一键登录取号[云通信号码认证服务]
- mysql排序的四种方式
- 连接不上oracle数据库
- 用户显示图片的服务器是什么,显示服务器上的图片怎么写
- 软考高项真题解析-关键路径的计算
- JavaScript的基本原理
- 计算油费 (10 分)
- 使用粘贴位修改文件的权限
- TIA博途V16上载程序后,在线无法监控程序,监控图标灰色,时间戳不一样如何解决?
- 计算机教室电气设计规范,教育建筑电气设计规范 [附条文说明] JGJ310-2013
- 遇见未来的自己——2021篇
- c语言中scanf(%7.2f,a);合法吗,C语言,语句scanf(7.2f,a);是一个合法的scanf函数?...
热门文章
- 导线线径对应可允许电流
- Java编程基础(3)——字典类型
- python3.8安装jupyter配置工作路径设置默认浏览器
- NDK JNI 变声器实现
- 数据库(从基本概念到事务操作)
- php用什么服务器系统时间格式,php中时间戳和日期格式的转换
- 单臂路由的详解及简单配置
- swust oj代码+解析_1165,0284,0074,0042,1171,0026,0189,0078,0046,0077,0209,0129
- 51单片机——基于单片机的旋转LED显示
- 商城-下单-订单系统接口