目录
1.继承
继承中的关键字是extends.
注意事项:
1.子类会将父类中的成员变量或者成员方法继承到子类中。
2.子类继承父类之后,必须要添加自己特有的成员,体现与父类的不同。
3.私有成员可以继承但不能访问。
4.java中只能继承一个类。
1.1:父类成员访问
子类与父类中的成员
注意:
1.如果访问成员变量子类中有,优先访问自己的成员变量。
2.如果访问的成员变量与父类中成员变量同名,则优先访问自己的。
成员变量访问遵循就近原则,自己有优先自己的,如果木有则向父类中找。
2.this应用和super关键字
2.1:this引用
1.this.普通成员变量
2.this.普通成员方法
3.this():调用结构体方法
注意:this引用的是调用成员方法的对象,不能调用静态的成员变量和方法。
注意:
1.this只能在成员方法中使用。
2.this只能引用当前对象,不能再引用其他对象。
构造方法:
1.名字必须与类名相同。
2.没有返回值类型,设置为void也不行。
3.当我们没有提供构造方法的时候,编译器会帮我们提供一个不带参数的方法。
4.实例化才会调用构造方法。
2.2:super关键字
1.super.data:访问父类的普通成员变量。
2.super.fun():调用父类的普通成员方法。
3.this():调用父类的构造方法。
注意:只能再非静态方法中使用
必须是构造方法中的第一语句,不能和this同用。
2.3:this和super的区别
1.this是当前对象的引用,当前对象是调用实例方法的对象。super是子类对象中从父类继承下来部分成员的引用。
2.在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性。
3.在构造方法中,this()用来调用本类构造方法,super()调用父类的构造方法。
2.4:final关键字
final关键字可以用来修饰变量,成员方法以及类。
public static void main(String[] args) { final int a=10; a=20;//这里报错了, //final修饰变量或字段,表示常量,只能初始化一次,且初始化后不能被修改 }
final修饰类:表示此类不能被继承-----密封类
3.多态
多态的意义:去完成莫个行为,当不同的对象去完成会产生不同的状态
3.1:多态实现条件
1.必须在继承的调价下
2.子类必须对父类中的方法进行重写。
3.通过父类的引用调用重写的方法。
多态中实现条件有重写,那我们来讲一讲重写和重载。
3.2:重写和重载
3.2.1:重载
class A {
public int c;
public int d;
public int fun(int a, int b) {//1
return a + b;
}
public double fun(double a, double c) {//2
return a * c;
}
}
class B {
public int a;
public int b;
public int fun(int a, int b, int c) {//3
return a + b + c;
}
}
public class Test1 {
public static void main(String[] args) {
A a = new A();
int c1 = a.fun(2, 3);
System.out.println(c1+" ");
int c2 = a.fun(2, 3);
System.out.println(c2+" ");
B b = new B();
int c3 = b.fun(2, 3, 4);
System.out.println(c3);
}
在这里1,2,3构成了重载。
注意:
1.方法名必须相同。
2.参数列表必须不同(参数的个数不同,参数的类型不同,类型的次序必须不同)。
3.与返回值类型是否相同无关。
3.2.2:重写
重写:是子类对父类非静态,非private修饰,非构造方法等的实现,进行重写。
方法重写的规则:
1.方法名相同。
2.参数列表相同。
3.返回值相同。(被重写的方法类型可以不同,但是必须是父子关系。)
4.访问权限不能比父类中被重写的方法的访问权限低。
重写和重载的区别,有时候会在面试中遇到。所以我们需要注意这些
3.2.3:重写和重载的区别
区别点 | 重写 | 重载 |
参数列表 | 不可修改 | 必须修改 |
返回类型 | 不可修改(除了父子类关系) | 可以修改 |
访问限定符 | 一定不能做更严格的限制 | 可以修改 |
3.3.向上转移
向上转移:实际就是创建一个子类对象,将其当成父类对象来使用。
class animal{ String name; int age; public animal(String name, int age) { this.name = name; this.age = age; } public void eat(){ System.out.println(name+"正在吃东西"); } } class Dog extends animal{ public Dog(String name, int age) { super(name, age); } public void eat(){ System.out.println(name+"吃狗粮"); } public void bark(){ System.out.println(name+"汪汪叫"); } } public class Test2 { public static void main(String[] args) { animal animal1=new Dog("hihi",10); animal1.eat();//这里就是 //animal1.bark()//这里报错 } }
这就是向上转型,只能调用父类的成员属性和方法。
多态的用例:
这里就是多态,dog 和cat都调用eatFood函数,但出现的结果是不一样的。
3.4.向下转型
向下转型:将父类再还原为子类对象即可,即为向下转型。
这里会出现类型转换异常。
instanceof:如果该表达式为true,则可以安全转换。
3.5:多态的优缺点
好处:
1.可以降低代码的圈复杂度(条件语句和循环语句出现的个数)
2.可扩展能力更强。
坏处:
1.代码运行效率低。
2.属性和构造方法没有多态性。
总结:如果有啥不对或者没有说明清楚的,希望大家可以多多指教。