继承跟接口
继承和接口
继承和接口
我们知道我们可以创建不同的类,在类中我们可以有不同的方法和属性,但是当一个类中需要调用另外一个类的方法或属性的时候,为了代码的简便,我们引入了类的继承。
首先我们先明确子类(也叫超类)和父类(也叫基类)的关系和意义。假设有A类和B类,A类需要继承B类中的属性和方法,则A类叫子类,B类叫父类。
接着我们注意到类的继承的格式:
public class 类名(子类或者超类) extends 类名(父类或者基类) {
}
关于继承,需要知道的两点是:
子类继承父类后,那么子类能继承到父类所有的属性和方法。
.子类能调用的方法和属性有哪些?
1.当子类和父类在同一个包下:
不能调用的属性和方法就只有私有的。
能调用的有公有的,受保护的,默认的属性和方法。
2.当子类和父类不在同一个包下:
在子类中能调用到的属性和方法有公有的和受保护的。
不在子类中(主函数或者其它的类中)调用属性和方法时能调用的有公有的属性和方法。
我们知道了继承的格式以及继承的条件之后,就不得不说到继承之后一个很重要的概念,方法的重写。当A类为子类继承了B类的方法之后,就可以进行方法的重写。看下面一段代码:一,
public void attack(){
System.out.println("奥特曼开始打怪兽了!");
}
二,
public void attack(){
System.out.println("迪迦奥特曼开始打怪兽了!");
}
这两个方法是在不同的类中写的,我们注意到两个方法名字相同,参数相同,这样我们便总结出方法重写的特点和条件:
1.方法重写的条件是什么?
1.必须要存在继承关系。
2.返回值数据类型,方法名,参数个数,参数类型,参数顺序必须要完全一致。
3.子类重写方法的访问修饰符可以大于或者等于父类方法的访问修饰符。
可是之后我们又会有疑问,在主函数中两个方法名字参数都一样,可是方法体又不一样,在调用的时候该怎么调用呢?我们再次总结到:
2.方法重写后如何调用?
1.是否是子类的对象
2.优先调用子类的方法,子类没有才会调用父类的方法。
看下面一张截图:
我们观察到左上角有一个绿色的三角形,在编译器中这是方法重写的标志。
这里我们要区分清楚方法重写和方法重载的区别
方法重载
实现方法重载的条件:
1.方法名必须要完全一致;
2.方法所带的参数个数、参数类型、参数顺序至少要有一个是不同的。
怎样调用呢?
根据参数的不同来决定调用不同的方法.
这是两个完全不同的概念。
接着我们要说到自动转型,举个例子:
byte b = 10;
int i = b;//自动转型
这就是一个自动转型。但这是系统默认的一个转型。要实现自动转型必须要存在继承。
首先我们有父类名和对象名;
一般情况下我们调用对象的格式如下:
对象名 = new 子类();
可是在自动转型中,因为有了类的继承,我们可以有如下格式:
父类名 对象名 = new 子类();
Student stu = new UNStudent();
看你下面一段代码:
AoTeMan dijia= new DiJia();
AoTeMan saiwen=new SaiWen();
AoTeMan tailuo=new TaiLuo();
需要注意的是使用自动转型后会导致无法调用子类的方法,产生问
题的原因是:因为Java的编译机制所引起的;在使用自动转型时,Java编译只会
根据对象名的类型去查找是否存在相应的方法,如果存在则通过编译,
否则就报错。
综合之前我们学过的技术,包括方法重载,继承,方法重写,自动转型等技术点,将他们组合起来,我们称之为多态。
继承和接口
我们知道我们可以创建不同的类,在类中我们可以有不同的方法和属性,但是当一个类中需要调用另外一个类的方法或属性的时候,为了代码的简便,我们引入了类的继承。
首先我们先明确子类(也叫超类)和父类(也叫基类)的关系和意义。假设有A类和B类,A类需要继承B类中的属性和方法,则A类叫子类,B类叫父类。
接着我们注意到类的继承的格式:
public class 类名(子类或者超类) extends 类名(父类或者基类) {
}
关于继承,需要知道的两点是:
子类继承父类后,那么子类能继承到父类所有的属性和方法。
.子类能调用的方法和属性有哪些?
1.当子类和父类在同一个包下:
不能调用的属性和方法就只有私有的。
能调用的有公有的,受保护的,默认的属性和方法。
2.当子类和父类不在同一个包下:
在子类中能调用到的属性和方法有公有的和受保护的。
不在子类中(主函数或者其它的类中)调用属性和方法时能调用的有公有的属性和方法。
我们知道了继承的格式以及继承的条件之后,就不得不说到继承之后一个很重要的概念,方法的重写。当A类为子类继承了B类的方法之后,就可以进行方法的重写。看下面一段代码:一,
public void attack(){
System.out.println("奥特曼开始打怪兽了!");
}
二,
public void attack(){
System.out.println("迪迦奥特曼开始打怪兽了!");
}
这两个方法是在不同的类中写的,我们注意到两个方法名字相同,参数相同,这样我们便总结出方法重写的特点和条件:
1.方法重写的条件是什么?
1.必须要存在继承关系。
2.返回值数据类型,方法名,参数个数,参数类型,参数顺序必须要完全一致。
3.子类重写方法的访问修饰符可以大于或者等于父类方法的访问修饰符。
可是之后我们又会有疑问,在主函数中两个方法名字参数都一样,可是方法体又不一样,在调用的时候该怎么调用呢?我们再次总结到:
2.方法重写后如何调用?
1.是否是子类的对象
2.优先调用子类的方法,子类没有才会调用父类的方法。
看下面一张截图:
我们观察到左上角有一个绿色的三角形,在编译器中这是方法重写的标志。
这里我们要区分清楚方法重写和方法重载的区别
方法重载
实现方法重载的条件:
1.方法名必须要完全一致;
2.方法所带的参数个数、参数类型、参数顺序至少要有一个是不同的。
怎样调用呢?
根据参数的不同来决定调用不同的方法.
这是两个完全不同的概念。
接着我们要说到自动转型,举个例子:
byte b = 10;
int i = b;//自动转型
这就是一个自动转型。但这是系统默认的一个转型。要实现自动转型必须要存在继承。
首先我们有父类名和对象名;
一般情况下我们调用对象的格式如下:
对象名 = new 子类();
可是在自动转型中,因为有了类的继承,我们可以有如下格式:
父类名 对象名 = new 子类();
Student stu = new UNStudent();
看你下面一段代码:
AoTeMan dijia= new DiJia();
AoTeMan saiwen=new SaiWen();
AoTeMan tailuo=new TaiLuo();
需要注意的是使用自动转型后会导致无法调用子类的方法,产生问
题的原因是:因为Java的编译机制所引起的;在使用自动转型时,Java编译只会
根据对象名的类型去查找是否存在相应的方法,如果存在则通过编译,
否则就报错。
综合之前我们学过的技术,包括方法重载,继承,方法重写,自动转型等技术点,将他们组合起来,我们称之为多态。