1.继承的概念
-
继承背后的思想就是基于已存在的类来构建新类
-
当从已存在类继承是,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求
-
约定:从其他类导出的类叫做子类
被导出的类叫做父类
-
在Java中,除了object类之外,所有类都是子类,只有唯一的父类
package jicheng.zhaohaip;
class Person{//父类
int age;
String name;
void eat(){
System.out.println("人吃饭");
}
}
class Student extends Person{//子类
String name = "xiaoming";
void Drink(){
System.out.println("学生喝水");
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person();
Student s = new Student();
p.age = 21;
p.eat();
s.age = 18;//子类可以调用父类中有的属性
System.out.println("student age = "+s.age);
s.Drink();
}
}
2.super关键字
super关键字的特点:
- super和this关键字的特点类似:super代表的是父类对象的引用
- 当父子类成员出现同名时,可以通过super来区分
- 子类的构造方法中,通过super关键字调用父类的构造方法
强调:当构造一个子类对象的时候一定会先调用父类的构造方法来构造父类对象。调用父类构造方法的语句必须是子类构造方法中的第一句
需要注意的是:父类私有的属性以及私有的方法不会继承给子类
package jicheng.zhaohaip;
class Person{//父类
int age;
String name;
void eat(){
System.out.println("人吃饭");
}
Person(int age,String name){//构造方法
System.out.println("父类构造方法");
this.age = age;
this.name = name;
}
}
class Student extends Person{//子类
String name = "xiaoming";
void Drink(){
System.out.println("学生喝水");
}
Student(int age,String name){//需要和父类其中一项构造方法参数列表一致
super(age,name);//需要在首行调用super
System.out.println("子类构造方法");//子类构造方法
}
}
public class Test {
public static void main(String[] args) {
Student s = new Student(20,"zhu");
}
}
3.方法重写
什么是方法重写:方法重写是指子类可以根据需要对父类继承来的方法进行改写,是多态机制的前奏
方法重写的注意点:
- 重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值
- 重写方法不能比被重写方法有更严格的访问权限
- 父类中的私有方法,不能被重写
- 在子类重写的方法中继续调用父类被重写的方法可以通过super.函数名获取
package jicheng.zhaohaip;
class Person{//父类
int age;
String name;
void eat(String name){
System.out.println("人吃饭");
}
}
class Student extends Person{//子类
String name = "xiaoming";
void Drink(){
System.out.println("学生喝水");
}
public void eat(String name){//重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值
//不能比被重写的方法有更严格的权限,但是可以有更宽松的权限
super.eat("zhao");//调用被重写的方法用:super.方法名
System.out.println("学生吃饭");
}
}
public class Test {
public static void main(String[] args) {
Student s = new Student();
s.eat("zhu");
}
}
4.object常见方法
- java中,所有类都直接或间接继承自Java.lang.object类,可以说object是Java中所有类的祖先,即根类
- Java中任何类都继承了object类中的方法,主要有toString() equals() hashcode() clone()
getClass() filnalize()
package jicheng.zhaohaip;
class Person{//父类
int age;
String name;
void eat(String name){
System.out.println("人吃饭");
}
public String toString() {
return "person msg:"+name;
}
public boolean equals(Object arg0) {//判断两个字符串是否相等
Person p = (Person)arg0;//强制转换类型
if(this.name == p.name)
return true;
else
return false;
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person();
Person p1 = new Person();
p.name = "zhao";
p1.name = "zhao";
System.out.println(p.toString());//默认打印类的内存地址,可以通过修改让他打印字符串
System.out.println(p.equals(p1));//默认对比两个类的地址是否相等
}
}