在子类创建对象时,发现父类的构造方法也运行了,为什么呢?

在子类的构造函数中第一行有一个隐式语句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();

  1. JVM会读取指定路径下的Person.class文件,并加载进内存,并会先加载父类
  2. 在堆内存中开辟空间,分配地址
  3. 并在对象空间中给成员属性默认初始化
  4. 调用对应的构造函数进行初始化
  5. 在构造函数中第一行调用的是父类的构造函数
  6. 父类构造函数的调用完后,对子类的属性进行显式初始化
  7. 在进行子类构造函数的特定初始化
  8. 初始化完毕后,将地址值赋给引用变量

final关键字(继承弊端,打破了封装性)

  1. final是一个关键字,可以修饰类,方法,变量
  2. final修饰的类不可以被继承
  3. final修饰的方法不可以被覆盖
  4. final修饰的变量是一个常量,只能赋值一次

为什么要用final?

其实如果一个数据是固定的,直接使用这个数据就行了,但是这样阅读性差 ,所以给该数据起个名字,且不能变化,加上final

抽象类abstract

  1. 方法只有声明而没有实现时,该方法是抽象方法需要用abstract修饰,抽象方法必须定义在抽象类中,该类也必须用abstract修饰
  2. 抽象类不可以被实例化,因为调用抽象方法没有意义
  3. 抽象类必须有子类覆盖其所有抽象方法后,其子类才可以实例化,否则该子类还是抽象类。

抽象类有关问题

  • 抽象类中有构造方法吗?

有,给子类进行初始化

  • 抽象类可以不定义抽象方法吗?

可以,但是很少见,目的就是不让该类创造对象,AWT适配器就是这种类。通常这个方法中有方法体但是没有内容

abstract class Demo{public void show(){}public void show2(){}
}
  • 抽象类关键字不可以与哪些关键字使用
  1. private 因为抽象方法需要被覆盖
  2. static 抽象方法的调用没有意义
  3. 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相关推荐

  1. 传智播客黑马Java学习笔记_day08_2

    设计模式:对问题行之有效的解决方式,一种思想,java24种 单例设计模式 解决问题:可以保证一个类的对象在内存中的唯一性 应用场景:多个程序使用同一个配置文件对象,就要保证配置文件的唯一性,配置文件 ...

  2. 传智播客黑马Java学习笔记_day05

    遍历数组 class Demo{public static void main(String args[]){int[] arry=new int[]{87,99,56};for(int x=0;x& ...

  3. 传智播客黑马Java学习笔记_day10_02

    对象的多态性 父类或者接口的引用指向子类对象 多态的好处 提高了代码的扩展性,前期的代码可以使用后期的内容 多态的弊端 前期的代码不能调用后期的特有内容 多态的前提 必须有关系:继承.实现 必须覆盖父 ...

  4. 【传智播客】Libevent学习笔记(三):事件循环

    目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_l ...

  5. 【传智播客】Libevent学习笔记(四):事件event

    目录 00. 目录 01. 事件概述 02. 创建事件 03. 事件的标志 04. 事件持久性 05. 超时事件 06. 信号事件 07. 设置不使用堆分配的事件 08. 事件的未决和非未决 09. ...

  6. 【传智播客】Libevent学习笔记(一):简介和安装

    目录 00. 目录 01. libevent简介 02. Libevent的好处 03. Libevent的安装和测试 04. Libevent成功案例 00. 目录 @ 01. libevent简介 ...

  7. 传智播客.黑马程序员,学C++不再难!

            众所周知,C++难.就好像博大精深的汉语比英语难,这是客观事实,我们并不否认.        但,转念想想,英语也不简单吧?从小学开始学,到了大学,挂在四六级上的同学数不胜数.可貌似没 ...

  8. 传智播客 传智播客.NET视频学习课件

    传智播客 传智播客.NET视频学习课件 访问.NET网站了解更多课程详情 http://net.itcast.cn (小提示:为什么本书中超链接打不开?) 此套课件是伴随传智播客.net实况教学视频 ...

  9. 细节决定成败 – 选择传智播客成都java培训

    传智播客成都Java培训中心,成立于2010年,秉承了北京传智播客"为企业优选一流好人才"的培训理念,"为学员提供高薪保证"的就业承诺!结合成都本地的优势,迅速 ...

最新文章

  1. 麦田在线携手网易云信,开启手机智能找房新时代
  2. 商城html源码_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统
  3. 怎么看oracle的procedure,Oracle基础 -- SQLPlus如何查看procedure的内容
  4. 【leetcode】数组的度-两个map关联初探
  5. 昆明冶金职业技术学院计算机,昆明冶金高等专科学校官网
  6. Java中的Ant与Maven比较整理
  7. 进程、lwp(轻量级进程)和Java线程的理解
  8. 住房公积金联名卡密码修改步骤
  9. PHP 阿里云OpenAPI签名[RPC 调用机制]·一键登录取号[云通信号码认证服务]
  10. mysql排序的四种方式
  11. 连接不上oracle数据库
  12. 用户显示图片的服务器是什么,显示服务器上的图片怎么写
  13. 软考高项真题解析-关键路径的计算
  14. JavaScript的基本原理
  15. 计算油费 (10 分)
  16. 使用粘贴位修改文件的权限
  17. TIA博途V16上载程序后,在线无法监控程序,监控图标灰色,时间戳不一样如何解决?
  18. 计算机教室电气设计规范,教育建筑电气设计规范 [附条文说明] JGJ310-2013
  19. 遇见未来的自己——2021篇
  20. c语言中scanf(%7.2f,a);合法吗,C语言,语句scanf(7.2f,a);是一个合法的scanf函数?...

热门文章

  1. 导线线径对应可允许电流
  2. Java编程基础(3)——字典类型
  3. python3.8安装jupyter配置工作路径设置默认浏览器
  4. NDK JNI 变声器实现
  5. 数据库(从基本概念到事务操作)
  6. php用什么服务器系统时间格式,php中时间戳和日期格式的转换
  7. 单臂路由的详解及简单配置
  8. swust oj代码+解析_1165,0284,0074,0042,1171,0026,0189,0078,0046,0077,0209,0129
  9. 51单片机——基于单片机的旋转LED显示
  10. 商城-下单-订单系统接口