面向对象
1.super详解
1.Alt+Insert:自动构造
2.Ctrl+H 继承的树会出现
3.super(),调用父类的构造器,必须要在子类构造器的第一行。
super注意点:
-
super调用父类的构造方法,必须在构造方法的第一个
-
supr必须只能出现在子类的方法或构造方法中
-
super和this不能同时调用构造方法
对比this:
代表的对象不同
this:本身调用者这个对象
super:代表父类对象的应用
前提
this:没有继承也可以使
super:只有在继承条件下才可以使用
构造方法
this();本类的构造
super();父类的构造
2.方法重写
快速生成对象:ctrl+alt+v
讲解
父类:
package cn.itcast.demo02;
//重写都是方法的重写与属性无关
public class B {
public static void test(){
System.out.println("B->void test()");
}
}
子类:
package cn.itcast.demo02;
public class A extends B{
public static void test(){
System.out.println("A->void test()");
}
}
测试:
package cn.itcast.demo02;
public class Application {
public static void main(String[] args) {
//方法的调用只和左边定义的数据类型有关
A a = new A();
a.test();
// 父类的引用指向了子类
B b = new A();
b.test();
}
}
结果:
A->void test()
B->void test()
································································································································································
父类:
package cn.itcast.demo02;
//重写都是方法的重写与属性无关
public class B {
public void test(){
System.out.println("B->void test()");
}
}
子类:
package cn.itcast.demo02;
public class A extends B{
// Override:重写
@Override//注解:有功能的注释
public void test() {
System.out.println("A->void test()");
}
}
测试类:
package cn.itcast.demo02;
public class Application {
public static void main(String[] args) {
A a = new A();
a.test();
// 父类的引用指向了子类
B b = new A();
b.test();
}
}
结果:
A->void test()
A->void test()
总结
重写:需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大,但不可以缩小:public>protected>Default>private
- 抛出的异常:范围可以被缩小,但不能扩大:ClassNotFoundException—>Exception(大)
重写,子类的方法和父类必须一致:方法体不同!
为什么需要重写:父类的功能,子类不一定需要,或者不一定满足!
3.多态
定义:
同一方法可以根据发送对象的不同而采用多种不同的行为方式。
一个对象的实际类型是确定的,但可以指向的对象的引用的类型很多
多态注意事项:
1.多态是方法的多态,属性没有多态。
2.父类和子类,有联系。类型转换异常!ClassCastException!
3.存在条件:继承关系,方法需要重写,父类引用指向子类对象!
Farther f1=new son();
4.不能重写的方法:static 修饰的方法,它属于类,不属于实例
final修饰的方法
private修饰的方法
讲解
父类:
package cn.itcast.demo03;
public class Person {
public void run(){
System.out.println("run");
}
}
子类:
package cn.itcast.demo03;
public class Student extends Person{
@Override
public void run() {
System.out.println("son");
}
public void eat(){
System.out.println("eat");
}
}
测试类:
package cn.itcast.demo03;
public class Application {
public static void main(String[] args) {
// Student能调用的方法都是子类的或者从父类继承的
Student s1 = new Student();
// Person 父类型,只能调用自己的,不能调用子类独有的方法
Person s2 = new Student();
Object s3=new Student();
// 对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
s2.run();//子类重写了父类的方法,执行了子类的方法
s1.run();
}
}
4.instanceof
定义:
instanceof是Java语言中的一个二元运算符,它的作用是:判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例,即它左边的对象是否是它右边的类的实例,该运算符返回boolean类型的数据。
5.类型转换
- 父类引用指向子类对象;
- 把子类转换成父类,向上转型,自动的;
- 把父类转化成子类的,向下转型,强制转换(高-》低);
- 方便方法的调用,减少重复的代码。