大一菜鸟,正在自学java中,文章如有误的地方,欢迎交流指正,共同进步!
1.继承是面向对象的三大特征之一,可以使子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法
2. 继承格式:
public class 子类名 extends 父类名{}
3.父类和子类的关系:
高内聚:一个事物自己可以完成所有的功能, 低耦合:对于其他代码的依赖性非常低
自动生成继承模式图:在子类中鼠标右键找到Diagrams键可以生成
##1.继承中变量访问特点
public class parent02 {
int age=20;
}
public class student02 extends parent02 {
int height = 118;
int age= 21;
public void show(){
/*int age=22;
int height = 168;*/
System.out.println( age +","+height);
}
}
//测试类
public class Demo02 {
public static void main(String[] args) {
student02 s= new student02();
s.show();
}
}
关键字 | 访问成员变量 | 访问构造方法 | 访问成员方法 |
---|---|---|---|
this | this.成员变量(访问本类的成员变量) | this(…)(访问本类的构造方法) | this.成员方法(访问本类的成员方法) |
super | super.成员变量(访问父类的成员变量) | super(…)(访问父类的构造方法) | super.成员方法(访问父类的成员方法) |
public class parent03 {
int age = 20;
}
public class student03 extends parent03 {
int age = 21;
public void show() {
int age = 22;
System.out.println(age);
//访问成员变量
System.out.println(this.age);
//访问父类中的成员变量
System.out.println(super.age);
}
}
public class Demo03 {
public static void main(String[] args) {
student03 s=new student03();
s.show();
}
}
子类在调用自己构造方法时,默认调用父类的构造方法
子类中如果访问其他构造方法, 必须把它this语句和super语句写在第一句
子类的构造方法中,this语句和super语句两者只能出现一个
public class parent04 {
public parent04(){
System.out.println("父类带无参构造方法");
}
public parent04(int age){
System.out.println("父类带有参构造方法");
}
}
public class student04 extends parent04 {
public student04(){
super(20);
System.out.println("子类带无参构造方法");
}
public student04(int age){
super(20);
System.out.println("子类带有参构造方法");
}
}
public class Demo04 {
public static void main(String[] args) {
student04 s=new student04();
student04 s2=new student04(20);
}
}
public class parent05 {
public void show(){
System.out.println("父中show方法被调用");
}
}
public class student05 extends parent05 {
public void method(){
System.out.println("子中method方法别调用");
}
public void show(){
super.show();
System.out.println("子中show方法被调用");
}
}
public class Demo05 {
public static void main(String[] args) {
//创建对象 调用方法
student05 s=new student05();
s.method();
s.show();
}
}
重载: 在同一个类中,方法名一致,参数列表不同,与返回值类型无关
重写: 在父子类中,方法名一致, 参数列表一致,返回值类型一致
public class Parent06 {
public void show() {
System.out.println("父类中show方法");
}
public void method() {
System.out.println("父类中method方法");
}
}
public class Student06 extends Parent06 {
@Override
public void show() {
System.out.println("子类中的show方法");
}
@Override
public void method() {
System.out.println("子类中的method方法");
}
}
方法重写的注意事项:
重写方法必须是父类定义的方法
重写方法可以保存父类的实现,保存的方式super.重写的方法名(实参),也可以不要父类的实现
重写的方法,子类方法访问权限不能比父类小(public>默认>private(私有的))
父类的方法如果用private修饰, 子类是无法重写(即私有方法不能被重写)
5.继承的特点:
如果支持了多继承, 那么可能子类继承的多个父类中有相同的方法,
父类们对这些方法都有不同实现,子类继承中就不知道该调用那个父类对这个方法的实现了则存在安全隐患