这块也不知道该怎么总结,感受不少,但又不知道总结什么。可能高手到必定境界无招胜有招吧,哈哈,自吹了。java
总结本身以为比较出问题或者以前面试中影响比较深入的内容吧。面试
修饰符 | 当前类 | 同包内 | 子类 | 其余类 |
---|---|---|---|---|
private | √ | - | - | - |
default | √ | √ | - | - |
protected | √ | √ | √ | - |
public | √ | √ | √ | √ |
public class Father { static { System.out.println("Father static"); } { System.out.println("Father {}"); } public Father() { System.out.println("Father()"); } } public class Son extends Father { static { System.out.println("Son static"); } { System.out.println("Son {}"); } public Son() { System.out.println("Son()"); } public static void main(String[] args) { Son son = new Son(); } }
打印结果:ide
重载是同一个类中,而重写存在于子父类中。函数
知足条件:this
重写code
首先子类修饰符可见范围不能小于父类,返回值类型须要相同,方法名相同,方法的参数类型、个数、顺序须要相同,固然参数名容许不一样。对象
重载继承
方法名必须相同,方法参数的类型、个数或者顺序不能相同。注意:返回值类型不一样(特别注意:返回值类型能够是父类返回值类型的子类),其余相同不能构成重载。图片
public void sayHello(String name, Date time) { System.out.println("hello " + name + ",如今是" + time); } // 特别注意: // 返回值类型不一样是没法工程重载 public Date sayHello(String name, Date time) { System.out.println("hello " + name + ",如今是" + time); return time; } // 参数顺序不一样 public void sayHello(Date time, String name) { System.out.println("hello " + name + ",如今是" + time); } // 参数个数不一样 public void sayHello(String name) { System.out.println("hello " + name); } // 参数类型不一样 public void sayHello(String name, String context) { System.out.println("hello " + name + "," + context); }
private final List<String> list = new ArrayList<String>(); // 特别注意: // 错误的修改final修饰变量的引用 list = new ArrayList<String>(); // 能够修改引用的内容 public void test() { list.add("A"); }
public class Student { // 为了代码简约和正确性,不考虑对状态的封装 public String name; public int age; @Override public boolean equals(Object o) { // 1. 判断引用的对象是否相同,相同则为相等 if (this == o) return true; // 2. 判断传入对象是否为空,由于调用equals的对象确定不为空,若是object为空,则确定不等 // 判断传入对象和this对象是否为同一个类构建的对象,若是不是,则确定不等 if (o == null || getClass() != o.getClass()) return false; // 3. 若是是同一个类构建的对象,则能够转型为相同类的对象,方便观察其状态是否相同 Student student = (Student) o; // 4. 观察状态是否相同。若是是基本数据类型,简单粗暴的使用== 。若是是对象,则还须要使用equals方法判断 if (age != student.age) return false; return name.equals(student.name); } @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + age; return result; } }