[size=large][/size]父类、子类、接口
父类和子类,顾名思义,它们就是老子和儿子,有着父子关系。而这里指的父子关系,其实
也就是一种包含关系。打个比方,在我们现实生活中,学生Student是一个很大的概念,而
UStudent大学生是属于学生中的一种,这里的学生即为父类,大学生即为子类。
那到底父类和子类区别在哪呢?打个比方,学生和大学生都会有学习Study这个方法,但是
大学生还会有自己特有的Study方法,两者还是有一定区别的,大学生的学习相较于其他学
生来说,是更自由的。
假如现在我已经有了一个Student类,然后我还要写一个UStudent类,然后UStudent类里有
很多方法和Student里的方法都相同,但是还是有一小部分不同,这时问题就出现了,怎样
去解决呢?难道又重新来写一个大学生类,并且重复敲一遍和学生类中一样的代码吗?那样
浪费了时间和精力,并且浪费了存储空间,是很不划算的。于是乎,我们就想到了继承。
子类继承父类,顾名思义,就是子类能引用父类中的某些东西。继承的关键字是extends,
用几行代码说明下怎么去继承。
eg.public class Student(){}//父类
public class UStudent extends Student(){}//子类继承了父类
刚才上面说了当子类和父类用一个同名方法,但是子类的实现却和父类不同、有其特殊性时
,用到方法的重写。重写是指方法定义相同,但是实现不同,存在于父子类之间。
eg.
//父类
public class Student(){
//学习方法
public void study(){
System.out.println("我通过听老师讲课学习");
}
}
//子类
public class UStudent extends Student(){
public void study(){
System.out.println("我通过自习去学习");
}
}
在父类和子类中还有个很重要的概念,转型。分为强制转型和自动转型,这里我们主要讲解
自动转型。父类对象是可以自动转型为子类对象的,然后直接调用子类中已重写的方法。
eg.
Student stu1 = new UStudent(); //stu1自动转型为学生类对象
stu1.study(); //学生类对象调用的是大学生的学习方法
多态
一个学生能学习,但是引入了自动转型机制、大学生、中学生、小学生继承了学生类、方
法重写了之后。父类对象调用一个study()方法,结果是不确定的。又如,我们大家都是人
,但是由于我们每个人都是独特的。这就是多态最直接的体现。
eg.
public class Student(){
System.out.println("0000");
}
public class UStudent() extends Student{
System.out.println("1111");
}
public class SeniorStudent extends Student(){
System.out.println("2222");
}
//多态的体现:父类对象两次调用study,结果是完全不同的
Student stu1 = new UStudent();
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");
}
}
最后再总结一下:
1.一个class只能extends一个class(单根继承)
2.一个class可以implements多个interface
3. 一个interface可以extends多个interface
4.一个class可以在extends一个class的基础上再去implements多个interface[size=large][/size][size=x-large][/size][size=xx-large][/size][size=large][/size]
父类和子类,顾名思义,它们就是老子和儿子,有着父子关系。而这里指的父子关系,其实
也就是一种包含关系。打个比方,在我们现实生活中,学生Student是一个很大的概念,而
UStudent大学生是属于学生中的一种,这里的学生即为父类,大学生即为子类。
那到底父类和子类区别在哪呢?打个比方,学生和大学生都会有学习Study这个方法,但是
大学生还会有自己特有的Study方法,两者还是有一定区别的,大学生的学习相较于其他学
生来说,是更自由的。
假如现在我已经有了一个Student类,然后我还要写一个UStudent类,然后UStudent类里有
很多方法和Student里的方法都相同,但是还是有一小部分不同,这时问题就出现了,怎样
去解决呢?难道又重新来写一个大学生类,并且重复敲一遍和学生类中一样的代码吗?那样
浪费了时间和精力,并且浪费了存储空间,是很不划算的。于是乎,我们就想到了继承。
子类继承父类,顾名思义,就是子类能引用父类中的某些东西。继承的关键字是extends,
用几行代码说明下怎么去继承。
eg.public class Student(){}//父类
public class UStudent extends Student(){}//子类继承了父类
刚才上面说了当子类和父类用一个同名方法,但是子类的实现却和父类不同、有其特殊性时
,用到方法的重写。重写是指方法定义相同,但是实现不同,存在于父子类之间。
eg.
//父类
public class Student(){
//学习方法
public void study(){
System.out.println("我通过听老师讲课学习");
}
}
//子类
public class UStudent extends Student(){
public void study(){
System.out.println("我通过自习去学习");
}
}
在父类和子类中还有个很重要的概念,转型。分为强制转型和自动转型,这里我们主要讲解
自动转型。父类对象是可以自动转型为子类对象的,然后直接调用子类中已重写的方法。
eg.
Student stu1 = new UStudent(); //stu1自动转型为学生类对象
stu1.study(); //学生类对象调用的是大学生的学习方法
多态
一个学生能学习,但是引入了自动转型机制、大学生、中学生、小学生继承了学生类、方
法重写了之后。父类对象调用一个study()方法,结果是不确定的。又如,我们大家都是人
,但是由于我们每个人都是独特的。这就是多态最直接的体现。
eg.
public class Student(){
System.out.println("0000");
}
public class UStudent() extends Student{
System.out.println("1111");
}
public class SeniorStudent extends Student(){
System.out.println("2222");
}
//多态的体现:父类对象两次调用study,结果是完全不同的
Student stu1 = new UStudent();
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");
}
}
最后再总结一下:
1.一个class只能extends一个class(单根继承)
2.一个class可以implements多个interface
3. 一个interface可以extends多个interface
4.一个class可以在extends一个class的基础上再去implements多个interface[size=large][/size][size=x-large][/size][size=xx-large][/size][size=large][/size]