继承:

  1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模。

  2.提高代码的复用性。

  3.extends(扩展),子类是父类的扩展。

  4.子类继承父类可以得到父类的全部属性和方法。(除了父类的构造方法)。

  5.java中只有单继承,没有像c++这种的多继承。多继承就是为了实现代码的复用性,但引入了复杂性,使系统之间的关系造成混乱。

  6.java中的多继承,可以通过接口来实现。

  7.如果定义一个类时,没有调用extends,则默认定义的父类是:Java.lang.Object。

  8.不同的的叫法:超类,父类,基类,子类,派生类。

继承:

代表了一种is-a关系。如果说A是B,也就可以说A继承了B。

父类(SuperClass):更加通用。
* 可以子类中共有的特性和功能保存到父类中
* 优点:提高了代码的复用性。

  1. public class Teacher {
  2. private String name;
  3. private int age;
  4. private int wrokOfYear;
  5.  
  6. public Teacher(String name, int age, int wrokOfYear) {
  7. // super();
  8. this.name = name;
  9. this.age = age;
  10. this.wrokOfYear = wrokOfYear;
  11. }
  12.  
  13. public Teacher() {
  14. // super();
  15. }
  16.  
  17. // getter方法:取值
  18. public String getName() {
  19. return name;
  20. }
  21.  
  22. // setter方法:赋值
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26.  
  27. public int getAge() {
  28. return age;
  29. }
  30.  
  31. public void setAge(int age) {
  32. this.age = age;
  33. }
  34.  
  35. public int getWrokOfYear() {
  36. return wrokOfYear;
  37. }
  38.  
  39. public void setWrokOfYear(int wrokOfYear) {
  40. this.wrokOfYear = wrokOfYear;
  41. }
  42.  
  43. /**
  44. * 自我介绍
  45. */
  46. public void intro() {
  47. System.out.println("同学们好,我是" + name + ",今年" + age + "岁,已经工作了" + wrokOfYear + "年");
  48. }
  49.  
  50. /**
  51. * 授课
  52. */
  53. public void giveLession() {
  54. System.out.println("知识点讲解....");
  55. System.out.println("知识点总结....");
  56. }
  57.  
  58. }

子类:更加具体
* 在java中使用extends关键字实现继承。
* 一旦两个两个类建立了继承关系,子类就可以拥有父类非私有的属性和方法。
* 子类无法继承父类的构造方法,但可以通过super关键字进行调用。
* 语法 [修饰符] class 子类 extends 父类{
*
* }

方法的重写(override):一般发生在子类和父类之间

  1.既可以继承父类的东西又可以灵活的扩充。

  2.其实就是在子类中重新把父类的同名方法重新写一个进行覆盖。

  3.重写方法必须和被重写方法有相同的方法名称,参数列表,返回值。

  4.重写方法不能使用比被重写方法更严格的访问权限。

  5.子类的修饰符范围>=父类的修饰符范围。

重写(override)和重载(overload)的区别:

* 1.重写一般发生在父子之间,重载一般在同一个类中。
* 2.重写要求方法名,返回值类型,参数列表必须与父类相同,并且修饰符范围大于等于父类方法的修饰符范围。
* 重载方法名相同,参数列表不同,与返回值类型及修饰符无关。
* 3.作用不同。
* 重载主要是为了提供一种同名方法不同参数的能力(可以让一个类用于多个同名的方法)
* 重写主要是为了结合多态使用,提高程序扩展性和可维护性。
*
* 注意:一旦子类重写了父类中的方法,创建子类实例后,调用子类重写后的方法。
*
* @Override:重写的注解,标注当前方法为重写父类的方法,必须满足重写的规则。
*/

super:

  是直接父类对象的引用,可以通过 super来调用父类中被子类覆盖的方法和属性。

  super和this其实都是隐式参数,super指当前父类,this指当前。

  1. public class JavaTeacher extends Teacher{
  2. public JavaTeacher(){
  3.  
  4. }
  5. public JavaTeacher(String name,int age,int workOfYear){
  6. super(name,age,workOfYear);//调用父类的构造方法
  7. }
  8.  
  9. //方法的重写(覆写)
  10. public void giveLession() {
  11. System.out.println("打开eclipse.....");
  12. // System.out.println("知识点讲解.....");
  13. // System.out.println("知识点总结.....");
  14. super.giveLession();//使用super调用父类的方法。
  15. }
  16. }
  1. public class Test {
  2. public static void main(String[] args) {
  3. JavaTeacher javaTeacher = new JavaTeacher("zhangsan",30,6);
  4. javaTeacher.intro();
  5. javaTeacher.giveLession();
  6. System.out.println("************************************");
  7. DBTeacher dbTeacher = new DBTeacher("lisi",33,9);
  8. dbTeacher.intro();
  9. dbTeacher.giveLession();
  10. }
  11. }
  1. public class DBTeacher extends Teacher{
  2. public DBTeacher(){
  3.  
  4. }
  5. public DBTeacher(String name,int age,int workOfYear){
  6. super(name,age,workOfYear);//调用父类的构造方法
  7. }
  8.  
  9. public void giveLession() {
  10. System.out.println("打开oracle.....");
  11. super.giveLession();//调用父类的方法
  12. }
  13. }

super调用父类中带参数的构造方法同时调用自身的属性进行赋值:

  1. public TestCar(String bland,String size,int price,String color){
  2. super(bland,size,price);
  3. this.color=color;
  4. }

任何类的构造函数中,若是构造函数的第一行代码没有显式的调用super(...);那么Java默认都会调用super();作为父类的初始化函数。 所以你这里的super();加不加都无所谓。

  1. public class AtWill {
  2. public static void main(String[] args) {
  3. Cat c = new Cat(); //---------------(1)
  4. System.out.println("-------------------");
  5. Cat c1 = new Cat("花花",4); //----------------(2)
  6. }
  7. private String color;
  8. private int foot;
  9.  
  10. public AtWill(){
  11. System.out.println("我是父类无参数构造器");
  12. }
  13.  
  14. public AtWill(String color,int foot){
  15. System.out.println("我是父类有参数构造器");
  16. this.color = color;
  17. this.foot = foot;
  18. }
  19. }
  20. class Cat extends AtWill{
  21.  
  22. public Cat(){
  23. // super(); //---------------可以省略,没有super也自动调用父类无参构造
  24. System.out.println("我是子类无参数构造器");
  25. }
  26.  
  27. public Cat(String color,int foot){
  28. //super(color,foot); //---------------(3)
  29. // super(); //---------------可以省略,调用的父类无参构造
  30. System.out.println("我是子类有参数构造器");
  31. }
  32. }
  33. /**
  34. * 我是父类无参数构造器
  35. 我是子类无参数构造器
  36. -------------------
  37. 我是父类无参数构造器
  38. 我是子类有参数构造器
  39. */

*java.lang.Object类:所有类的基类
*一个类如果没有显式使用extends继承其他类,这个类继承了Object类,在任何类的对象中使用Object中的方法
*public class Student{
*}
*public class Student extends Object{
*}
*常用的方法:
* getClass() 返回此 Object 的运行时类。主要用于反射机制。
* toString() 返回该对象的字符串表示。如果使用System.out.println(stu);默认调用stu.toString()
* cn.zzsxt.oop6.Student@26ffd553==》
* cn.zzsxt.oop6.Student(包名.类名)+@+16进制表示的hashcode码
* toString()方法经常在子类中重写。
*
*/

  1. public class Student {
  2. String name;
  3. int age;
  4. public Student(){
  5.  
  6. }
  7.  
  8. public Student(String name,int age){
  9. this.name=name;
  10. this.age=age;
  11. }
  12.  
  13. @Override
  14. public String toString() {
  15. return "Student [name=" + name + ", age=" + age + "]";
  16. }
  17.  
  18. public static void main(String[] args) {
  19. Student stu = new Student("张三",);
  20. // Student stu2 = new Student();
  21. // String str = stu.toString();
  22. // String str2 = stu2.toString();
  23. // System.out.println(str);
  24. // System.out.println(str2);
  25. System.out.println(stu);//默认调用对象的toString();
  26. System.out.println(stu.toString());
  27. }
  28. }

重写object中equals方法:

  1. public class Student {
  2. String name;
  3. int age;
  4. public Student(){
  5.  
  6. }
  7. public Student(String name,int age){
  8. this.name=name;
  9. this.age=age;
  10. }
  11. /**
  12. * 重写Object中equals方法
  13. */
  14. @Override
  15. public boolean equals(Object obj) {
  16. Student stu = (Student)obj;  //强转?
  17. if(name.equals(stu.name)&&age==stu.age){
  18. return true;
  19. }else{
  20. return false;
  21. }
  22. }
  23.  
  24. }
  1. /**
  2. * ==和equals的区别
  3. * ==在比较内容时分为以下两种情况:
  4. * 1.使用==比较基本数据类型,做的值的比较,值相同返回true,否则返回false
  5. * 2.使用==比较引用类型,比较不是内容是否相同,而是两个对象的引用(地址)是否相同,
  6. * 如果指向相同的地址返回true,否则返回false。
  7. * equals():比较内容是否相同。
  8. * Object中的equals方法本质比较引用(==),如果需要按照内容进行比较是否相同,就需要重新Object中equals方法。
  9. */
  10. public class TestEquals {
  11. public static void main(String[] args) {
  12. Student stu = new Student("zhangsan",);
  13. Student stu2 = new Student("zhangsan",);
  14. System.out.println(stu==stu2);//比较stu和stu2是否指向相同的地址。
  15. System.out.println(stu.equals(stu2));//
  16. }
  17. }

父类和子类中代码的执行顺序
* 静态代码块在使用类时执行。
* 普通代码块在创建对象时执行。
* 父类的静态代码块>子类静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法
* 在创建子类时,先调用父类的构造方法先创建父类的实例,在创建子类的实例。

  1. public class Child extends Parent{
  2. {
  3. System.out.println("Child....代码块1");
  4. }
  5. static{
  6. System.out.println("Child...static1....");
  7. }
  8. public Child(){
  9. super();
  10. System.out.println("Child()....");
  11. }
  12. {
  13. System.out.println("Child....代码块2");
  14. }
  15. static{
  16. System.out.println("Child...static2....");
  17. }
  18.  
  19. public static void main(String[] args) {
  20. Child child = new Child();
  21. }
  22. }
  1. public class Parent {
  2. {
  3. System.out.println("Parent....代码块");
  4. }
  5. static{
  6. System.out.println("Parent...static1.....");
  7. }
  8.  
  9. public Parent(){
  10. System.out.println("Parent().....");
  11. }
  12.  
  13. {
  14. System.out.println("Parent....代码块2");
  15. }
  16. static{
  17. System.out.println("Parent...static2.....");
  18. }
  19.  
  20. }

Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)的更多相关文章

  1. java代码块执行顺序

    父类 public class Father { public Father() { System.out.println("父类构造PUBLIC father"); } stat ...

  2. Java中普通代码块,构造代码块,静态代码块执行顺序

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块 ...

  3. 三、Java基础---------关于继承、构造函数、静态代码块执行顺序示例讲解

    在上节博客中曾提到过类的继承,这篇文章主要是介绍类的继承.构造函数以及静态代码块的执行顺序. 首先接着分析在黑马基础测试中的一个关于继承的题目,题目描述如下: 声明类Person,包含2个成员变量:n ...

  4. Java中static代码块,{}大括号代码块,构造方法代码块执行顺序!

    注:下列代码中的注释都是JUnit4单元测试运行结果. 首先,没有父类的(父类是Object)的类A package Static.of; public class A { { System.out. ...

  5. java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序

    过滤器拦截到响应url的请求后会先执行doFilter()方法中chain.doFilter()之前的代码,然后执行下一个过滤器或者servelt.紧接着执行chain.doFilter()之后的代码 ...

  6. java中的代码块执行顺序

    /* 代码块:在Java中,使用{}括起来的代码被称为代码块. 根据其位置和声明的不同,可以分为 局部代码块:局部位置,用于限定变量的生命周期. 构造代码块:在类中的成员位置,用{}括起来的代码.每次 ...

  7. java中父类子类静态代码块、构造代码块执行顺序

    父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...

  8. Java静态代码块、构造代码块执行顺序问题

    package com.zxl.staticdemo; public class BlockTest { static { System.out.println("BlockTest静态代码 ...

  9. Java面向对象 继承(上)

       Java面向对象 继承 知识概要:         (1)继承的概述 (2)继承的特点 (3)super关键字 (4)函数覆盖 (5) 子类的实例化过程 (6) final关键字 (1)继承 ...

随机推荐

  1. CSS基础学习-15.CSS3 动画效果

  2. pycharm运行程序,总是出现IPthony界面(IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help. PyDev console: using IPython 6.2.1)

    解决方式如下: 取消即可.

  3. IIFE 立即执行函数表达式-模块化

    1)立即执行 2)表达式 3)括号,分号结束 | 前缀运算符 | 表达式上下文 4)只需要执行一次,内部变量无需维护,可用于初始化 (function( ) { })( ); 或 (function( ...

  4. Python获取本机所有IP地址

    import socket # 查看当前主机名 print('当前主机名称为 : ' + socket.gethostname()) # 根据主机名称获取当前IP print('当前主机的IP为: ' ...

  5. 记录微信小程序里自带 时间格式 工具

    微信小程序里面自己给了一个时间工具,是用来记录log日志,感觉可以记录下来,所以拿来自己用,以此记录: 直接传入 日期对象 进入 formatTime //得到下面格式的时间格式2017/07/22 ...

  6. vue cli3 + cube-ui 配置rem踩坑记录

    在install cube-ui时,选择了后编译,选中使用rem的时候会发现,怎么刷新页面的html字体被设置成了37.5px 感觉太大了,于是去寻找修改的办法,第一反应是webpack的配置,于是去 ...

  7. jquery trigger() 方法 语法

    jquery trigger() 方法 语法 作用:trigger() 方法触发被选元素的指定事件类型.深圳大理石平台 触发事件:规定被选元素要触发的事件. 语法:$(selector).trigge ...

  8. Confluence 6.15 附件宏参数

    参数 参数名称 默认值 描述 Filename Patterns(patterns) all   Attachment Labels(labels) (None) 标签(labels)的列表,用来过滤 ...

  9. POJ - 3162 Walking Race 树形dp 单调队列

    POJ - 3162Walking Race 题目大意:有n个训练点,第i天就选择第i个训练点为起点跑到最远距离的点,然后连续的几天里如果最远距离的最大值和最小值的差距不超过m就可以作为观测区间,问这 ...

  10. java中如何补齐汉字字符

    一个汉字相当于两个字符,所以需要输入法的时候切换到[中文全角],中文全角占用2个字符(一个空格),半角占用1个字符