• 继承
  1. 继承是类与类的一种关系,是一种“is a”的关系。注意:java中的继承是单继承,一个类只有一个父类。
  2. 继承的好处:子类拥有父类的所有属性和方法(private修饰的无效),实现代码的复用
  3. 语法规则:class 子类 extends 父类{}
  4. 父类对象的属性和子类对象的属性并没有关系,是两个属性
  • 方法的重写
  1. 如果子类对继承父类的方法不满意,可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。
  2. 语法规则:返回值类型、方法名、参数类型及个数,都要与父类继承的方法相同。
  • 继承的初始化顺序

  当我们创建一个对象的时候,所执行的构造方法相当于初始化一个对象

  1. 先初始化父类再初始化子类
  2. 先执行初始化对象中的属性,再执行构造方法中的初始化

  

  Animal.java

package com.test;

public class Animal {
public int age = 2;
public String name;
public void eat() {
System.out.println("动物具有吃东西的能力");
}
public Animal(){
System.out.println("animal的构造方法");
age = 4;
}
}

  Dog.java

package com.test;

public class Dog extends Animal {
public void eat() {
System.out.println("年龄"+age+"岁的狗是可以吃东西的");
}
public Dog(){
System.out.println("dog的构造方法");
}
}

  Initail.java

package com.test;

public class Initail {

    public static void main(String[] args) {
Dog dog = new Dog();
//dog.age = 1;
dog.eat();
}
}

  运行Initail.java,执行结果:

  animal的构造方法
  dog的构造方法
  年龄4岁的狗是可以吃东西的

  • final关键字

  使用final关键字做标识有“最终的”含义

  1. final修饰类,则该类不允许被继承
  2. final修饰方法,则该方法不允许被覆盖(重写)
  3. final修饰属性,则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)
  4. final修饰变量,则该变量的值只能赋一次值,即变为常量。
  • super关键字

  在对象的内部使用,可以代表父类对象

  1. 访问父类的属性:super.属性
  2. 访问父类的方法:super.方法
  3. 子类的构造的过程中必须调用其父类的构造方法。
  4. 如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。
  5. 如果显式的调用构造方法(super();),必须在子类的构造方法的第一行。
  6. 如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。
  • Object类

  Object类是所有类的父类,如果一个类没有extend是关键字明确标识继承另外一个类,那么这个类默认继承Object类

  Object类中的方法,适合所有子类

  1. toString()方法:在Object类里定义toString()方法的时候返回对象的哈希code码(对象地址字符串),可以通过重写toString()方法表示出对象的属性
  2. package com.test;
    
    public class Cat extends Animal{
    public int age = 2; @Override
    public String toString() {
    return "Cat [age=" + age + "]";
    } }
    package com.test;
    
    public class Initail {
    public static void main(String[] args) {
    Cat cat = new Cat();
    System.out.println(cat);
    }
    }

    如果Cat类没有重写toString(),运行结果是:com.test.Cat@2a139a55;如果Cat重写toString(),运行结果是:Cat [age=2]

  3. euqals():比较的是对象的引用是否指向同一块内存地址。一般情况下比较两个对象时比较他的值是否一致,所以要重写equals()
  4. package com.test;
    
    public class Cat extends Animal{
    public int age = 2;
    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    Cat other = (Cat) obj;
    if (age != other.age)
    return false;
    return true;
    }
    }

    如果运算符“==”两侧是引用类型数据,比较的并不是“值”本身,而是在内存的地址。

   注:通过new创建对象的时候,得到的对象是类的对象,obj.getClass()得到的是类对象。类对象描述的是类的代码信息,类的对象描述的是对象的数据信息。

   System.out.println(cat.getClass());输出结果:class com.test.Cat

最新文章

  1. 通过API找出Autodesk Vault中某个用户组可以访问的Vault
  2. bootstrap弹框
  3. css3 transition effect(其它效果)
  4. 完整的Ajax及三级联动小练习
  5. UITableview 多行删除
  6. 谈 IIS7.5 Asp.Net模拟用户
  7. FineUI 框架,RIA 富客户端应用的选择
  8. build-essential
  9. linux如果不进入window磁盘
  10. 对jsp的初步了解及规范问题(二)
  11. ios 监听TextField中内容
  12. [Leetcode 46]全排列 Permutations 递归
  13. 【API】检查进程是否存在 - CreateToolhelp32Snapshot
  14. cat、tac、rev、nl命令
  15. 说说PHP中foreach引用的一个坑
  16. php Pthread 多线程 (四) 共享内存
  17. C#线程篇---你所不知道的线程池(4)
  18. JSDoc 3 生成javascript API文档
  19. php学习一:语法规则
  20. 1563: [NOI2009]诗人小G

热门文章

  1. linux查找包含某个字符的文件并导出文件名
  2. 设置linux服务器文件夹权限
  3. 下载GitHub仓库的某个子文件夹
  4. H - 逆序数(树状数组)
  5. Linux Vi/Vim 在插入模式下键盘右边数字键输入异常
  6. java——抽象类、接口、二者区别
  7. Dev Express Report 学习总结(三)关于子报表Sub-Report的使用
  8. swiper控件(回调函数)
  9. JavaSE---NIO
  10. C语言有GetOpenFile吗?