继承
人类是一个大类People,而儿童Child、青年人Youth、中年人Adult、老年人Elder都属于人类。后四种类有人类的共同特征,能完成人类公有的许多行为,当然,也有一些本类特有的特征和特定的行为。此时,我们将后四种类与人类的关系叫做“子类”和“父类”,子类“继承”父类。生活中还有很多场景也有关于继承。
eg.
public class People(){}
//继承的关键字是extends
public class Child extends People(){}
//子类继承到父类所有的属性和方法(除构造器),能调用的属性和方法却是有限的
public class Youth extends People(){}
重写
当子类和父类用一个同名方法,但是子类的实现却和父类不同、有其特殊性时,用到方法的重写。重写是指方法定义相同,但是实现不同,存在于父子类之间。
eg.
public class People(){
public void walk(){
System.out.println("I'm walking...");
}
}
//年青人属于人,都能走路,但他们走路比普通人而言,更走的轻快和开心;喜事用 //到了方法的重写
public class Youth(){
public void walk(){
System.out.println("I walk very fast and happy.");
}
}
自动转型
一个学生,是可以学习的。如果一个学生想用大学生、小学生、高中生的学习方法时,是不是要在学生类里写n个不同类别学生的学习方法呢?这时,用到自动转型。可以大量减少代码的重复编写:自动转型后的父类对象,可以直接调用子类已经重写的方法。
eg.
Student stu1 = new USStudent(); //stu1自动转型为学生类对象
Student stu2 = new SeniorStudent(); //stu2自动转型为学生类对象
stu1.study(); //学生类对象调用的是大学生的学习方法
stu2.study(); //学生类对象调用的是中学生的学习方法
多态
一个学生能学习,但是引入了自动转型机制、大学生、中学生、小学生继承了学生类、方法重写了之后。父类对象调用一个study()方法,结果是不确定的。又如,我们大家都是人,但是由于我们每个人都是独特的。这就是多态最直接的体现。
eg.
public class Student(){
System.out.println("0000");
}
public class USStudent() extends Student{
System.out.println("1111");
}
public class SeniorStudent extends Student(){
System.out.println("2222");
}
//多态的体现:父类对象两次调用study,结果是完全不同的
Student stu1 = new USStudent();
stu1.study();
Student stu2 = new SeniorStudent();
stu2.study();
接口
比如,我们要画图形,LINE、OVAL、RECT等都继承自DrawImage类,但是每个子类画图的方法都是完全不一样的,此时,父类里面不需要有什么具体实现就行。这时,接口出现了。它的作用就是给其他类继承(这里用到一个特殊的关键字:interface,是特殊的继承),让其他类实现里面很抽象的方法。
eg.
//接口里的方法都是抽象的,没有方法体;属性都是常量;不能实例化一个对象
public interface DrawImage(){
public void draw();
}
public class LINE implements DrawImage(){
public void drawLine(){
System.out.println("draw a line");
}
}
public class OVAL implements DrawImage(){
public void drawOval(){
System.out.println("draw a oval");
}
}
public class LINE implements DrawImage(){
public void drawRect(){
System.out.println("draw a rect");
}
}
抽象类
上一个“接口”要求实现它的类实现所有它的方法,这样也许会是代码态冗长,因为有的方法根本就没有实现的必要。抽象类出现了。继承抽象类的类必须实现其抽象方法,但是对于普通方法,是可以按照编程的需要选择性实现的。这样,代码会更简洁。
eg.
MouseAdapter抽象类(具体在书本上;注意抽象类也不能实例化一个对象)
人类是一个大类People,而儿童Child、青年人Youth、中年人Adult、老年人Elder都属于人类。后四种类有人类的共同特征,能完成人类公有的许多行为,当然,也有一些本类特有的特征和特定的行为。此时,我们将后四种类与人类的关系叫做“子类”和“父类”,子类“继承”父类。生活中还有很多场景也有关于继承。
eg.
public class People(){}
//继承的关键字是extends
public class Child extends People(){}
//子类继承到父类所有的属性和方法(除构造器),能调用的属性和方法却是有限的
public class Youth extends People(){}
重写
当子类和父类用一个同名方法,但是子类的实现却和父类不同、有其特殊性时,用到方法的重写。重写是指方法定义相同,但是实现不同,存在于父子类之间。
eg.
public class People(){
public void walk(){
System.out.println("I'm walking...");
}
}
//年青人属于人,都能走路,但他们走路比普通人而言,更走的轻快和开心;喜事用 //到了方法的重写
public class Youth(){
public void walk(){
System.out.println("I walk very fast and happy.");
}
}
自动转型
一个学生,是可以学习的。如果一个学生想用大学生、小学生、高中生的学习方法时,是不是要在学生类里写n个不同类别学生的学习方法呢?这时,用到自动转型。可以大量减少代码的重复编写:自动转型后的父类对象,可以直接调用子类已经重写的方法。
eg.
Student stu1 = new USStudent(); //stu1自动转型为学生类对象
Student stu2 = new SeniorStudent(); //stu2自动转型为学生类对象
stu1.study(); //学生类对象调用的是大学生的学习方法
stu2.study(); //学生类对象调用的是中学生的学习方法
多态
一个学生能学习,但是引入了自动转型机制、大学生、中学生、小学生继承了学生类、方法重写了之后。父类对象调用一个study()方法,结果是不确定的。又如,我们大家都是人,但是由于我们每个人都是独特的。这就是多态最直接的体现。
eg.
public class Student(){
System.out.println("0000");
}
public class USStudent() extends Student{
System.out.println("1111");
}
public class SeniorStudent extends Student(){
System.out.println("2222");
}
//多态的体现:父类对象两次调用study,结果是完全不同的
Student stu1 = new USStudent();
stu1.study();
Student stu2 = new SeniorStudent();
stu2.study();
接口
比如,我们要画图形,LINE、OVAL、RECT等都继承自DrawImage类,但是每个子类画图的方法都是完全不一样的,此时,父类里面不需要有什么具体实现就行。这时,接口出现了。它的作用就是给其他类继承(这里用到一个特殊的关键字:interface,是特殊的继承),让其他类实现里面很抽象的方法。
eg.
//接口里的方法都是抽象的,没有方法体;属性都是常量;不能实例化一个对象
public interface DrawImage(){
public void draw();
}
public class LINE implements DrawImage(){
public void drawLine(){
System.out.println("draw a line");
}
}
public class OVAL implements DrawImage(){
public void drawOval(){
System.out.println("draw a oval");
}
}
public class LINE implements DrawImage(){
public void drawRect(){
System.out.println("draw a rect");
}
}
抽象类
上一个“接口”要求实现它的类实现所有它的方法,这样也许会是代码态冗长,因为有的方法根本就没有实现的必要。抽象类出现了。继承抽象类的类必须实现其抽象方法,但是对于普通方法,是可以按照编程的需要选择性实现的。这样,代码会更简洁。
eg.
MouseAdapter抽象类(具体在书本上;注意抽象类也不能实例化一个对象)