super关键字
- super是直接父类对象的引用。
- 可以通过super来访问父类中被子类覆盖的方法或属性。
继承
- 父类方法的重写:
- “==”:方法名、形参列表相同。
= “≤≤”:返回值类型和异常类型,子类小于等于父类。 - “≥”:访问权限,子类大于等于父类
- “==”:方法名、形参列表相同。
- 构造方法调用顺序:
- 根据super的说明,构造方法第一句 总是:super(…)来调用父类对应的构造方法。
- 先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。
代码示例
package com.cwl.base.day03.oop;
/**
* @program: java_base
* @description:
* @author: ChenWenLong
* @create: 2019-11-07 10:42
**/
public class TestExtends {
public static void main(String[] args) {
Student stu = new Student();
stu.name="ChenWenLong";
stu.height = 172;
stu.rest();
Student stu2 = new Student("希希",6,"挖掘机专业");
System.out.println(stu2 instanceof Student);
System.out.println(stu2 instanceof Person );
System.out.println(stu2 instanceof Object );
System.out.println(new Person() instanceof Student );
}
}
class Person /*extends Object*/ {
String name;
int height;
public void rest(){
System.out.println("休息一会!");
}
}
class Student extends Person {
String major;
public void study(){
System.out.println("学习两小时!");
}
public Student(String name,int height, String major){
this.name = name;
this.height = height;
this.major = major;
}
public Student(){
}
}
对象的比较—==和equals()
- ==
- 比较两基本类型变量的值是否相等
- 比较两个引用类型的值即内存地址是否相等,即是否指向同一对象。
- equals()
- 两对象的内容是否一致
代码示例
package com.cwl.base.day03.oop;
/**
* @program: java_base
* @description:
* @author: ChenWenLong
* @create: 2019-11-07 10:39
**/
public class TestEquals {
public static void main(String[] args) {
Object obj;
String str;
User u1 = new User(1000,"***","123456");
User u2 = new User(1000,"***","123456");
System.out.println(u1==u2);
System.out.println(u1.equals(u2));
String str1 = new String("***");
String str2 = new String("***");
System.out.println(str1==str2); //false
System.out.println(str1.equals(str2)); //true
}
}
class User {
int id;
String name;
String pwd;
public User(int id, String name, String pwd) {
super();
this.id = id;
this.name = name;
this.pwd = pwd;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (id != other.id)
return false;
return true;
}
}
多态 polymorphism
- 多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有 在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展 性。
- java中如何实现多态?使用多态的好处?