继承子类与父类

一.类与类之间的关系

1.横向关系

组合

依赖

聚合

关联

2.纵向关系

泛化

实现

二、继承

类与类之间呈现上下级关系,通过继承可以对已有的类进行扩展,从而提高程序的扩展性,既保留原有功能,有增加新特征

继承关系的实现

修饰符 子类 exten 父类{

}

public class Demo4 extends Demo3{
}

子类可以继承父类所有非私有的资源 

1.继承的特点

1、Java只能单继承

2、可以多重继承(A extends B,B extends C)

3、子类在构造对象时,首先执行父类构造器进行初始化(没有创建父类对象)

4、假如父类没有无参构造,子类要创建相同构造器使用super对父类构造器进行调用

5、构造器不能被继承,只能被调用

6、子类可以使用父类的非私有资源,但是父类不能使用子类的资源

2.this&super

this关键字

在当前类中,使用当前对象,用this表示

在类中调用其他构造方法(很少使用)

 public Demo3(String username,String password,String sex){
        this();                  //在类中this加括号就是调用构造方法
        
        this.username = username;
        this.password = password;
        this.sex = sex;
    }

在类中调用构造方法只能出现在构造器种

只能出现在构造器的第一行

在类中调用其他资源 

  public void Dome4(){
        int username = 0;
        this.username = "2e3";
        this.setUsername("关羽");
        System.out.println("我可以学习");
    }

super关键字

在子类中调用父类的构造方法

public Demo4(String username, String password, String sex, double money, boolean marry) {
        super(username, password, sex, money, marry);
    }

super()必须出现在第一行

不能出现在普通方法中,只能出现在构造器中

在子类中调用父类的其他资源

public void setA(int a ){
        this.a = a;    //调用自己的
        super.getUsername();    
        super.studay();    //调用父类方法
    }

三、方法的重写

方法重写是实现多态的一种策略,他是由继承衍生出来的一种概念,子类继承父类之后,重写定制父类的方法,从代码层面来看,父类的方法满足不了子类的需求,子类将父类的方法重写,这个方法称为方法重写

Father

public class Father {
    public void study(){
    System.out.println("种地");
    }
}

Son(子类) 

public class Son extends Father{
    public void study(){
        System.out.println("正在学习编程");
    }
}

方法重写注意点:

1、必须存在继承关系

2、子类重写父类的方法

3、重写的方法名必须和父类的方法名相同

4、参数列表必须一致

5、返回值必须相同

6、 访问权限不能低于被重写父类方法

三、Object类

object类是所有Java类的祖先,任何时候创建的类都默认继承object类,object类中所有方法都可以被继承到子方法,子方法可以对这些方法重写,从而实现具体业务要求,常见方法:

equals方法和hashcode方法

重写equals和hashcode方法,让对象比较时不在比较地址,而是比较成员变量值和hashcode值

tostring方法

重写tostring,让对象输出不再是输出地址值,而是输出成员变量值

Objects类

objects类jdk1.7提供的一个工具类 ,他为我们提供了一个空指针安全的操作方法

public class People {
    private String name;
    private String sex;
    private String dz;
    private int price;

    public People(String 农民, String 男, String 湖北, int i) {
    }
}

public class Demo5{
    public static void main(String[] args) {
        People p = null;
        People p1 = new People("农民","男","湖北",1500);
        System.out.println(Objects.equals(p,p1));
    }
}

子类继承父类后,调用父类方法主要有以下几种方式: - **使用`super`关键字**: - **调用父类构造函数**:在子类构造函数中,若要调用父类构造函数,需使用`super`,且`super`语句必须是子类构造方法的第一句。若子类构造函数未显式调用父类的构造函数,Java编译器会在子类构造方法的第一行插入`super()`,即调用父类的无参构造方法。若父类没有无参构造方法,子类必须显式地调用父类的构造方法,否则编译器会报错[^2]。 - **调用父类被重写的方法**:当子类重写(Override)父类方法后,若想调用父类中被重写的方法,使用`super`关键字。示例代码如下: ```java class TestA { public void a() { System.out.println("this is TestA a method"); } public void b() { System.out.println("this is TestA b method"); } } public class TestC extends TestA { // 重写父类b方法 public void b() { System.out.println("this is TestC b method"); } public void aa() { super.a(); // 调用父类未重写的方法 a(); } public void bb() { super.b(); // 调用父类被重写的方法 b(); } public static void main(String[] args) { TestC tc = new TestC(); tc.aa(); tc.bb(); } } ``` - **直接调用**:若子类没有重写父类的方法,调用父类的方法时,用不用`super`关键字结果都一样,可直接使用`this`关键字调用,也可省略`this`。例如: ```java class Parent { public void method() { System.out.println("Parent method"); } } class Child extends Parent { public void callParentMethod() { method(); // 直接调用父类未重写的方法 } } ``` - **创建父类对象调用**:子类也可以创建一个父类对象,然后通过该对象调用父类方法,但这种方式并非严格意义上的继承调用,因为创建的是独立的父类对象,而非使用继承的特性。示例如下: ```java class Parent { public void parentMethod() { System.out.println("Parent method"); } } class Child extends Parent { public void callParentMethod() { Parent parent = new Parent(); parent.parentMethod(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值