面向对象OOP(封装,继承)

本文介绍了Java中的封装机制,如何隐藏类的内部细节并提供访问接口。讨论了封装的优点、私有和公共关键字的应用,以及继承的概念,包括如何通过`extends`实现子类继承父类的属性和方法。此外,文章还讲解了构造器的作用,如何使用`super`关键字,以及重载和重写的区别及其在代码中的应用示例。
摘要由CSDN通过智能技术生成

封装:

  • 封装是一种将数据(变量)和作用于数据(方法)的代码打包为一个单元的机制;在封装中;类的变量将对其他类隐藏;并且只能通过当前类的方法访问。
  • 封装可以对类的内部进行改变而不影响整体结构;同时也用来保护数据;对于外界而言,它的内部是隐藏的;暴露给外界的只是可以访问它的方法。

1.封装的优点:

  • 类内部可以自由修改
  • 可以对成员变量更准确的控制
  • 隐藏信息,保护数据 
  • 编写实例类时,用到封装有很多好处,

  • 重复调用,避免代码冗余,程序编写效率高

2.关键字:

  • public        {对外公开}
    • private        {不对外公开;只能在对象内部访问}

3.封装代码:

package JC;

public class Animal {
    private int id;
    private int age;
    private String name;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

继承:

  • 继承即子类继承父类的特征和行为;使得子类对象(实例)具有父类的实例域和方法;或子类从父类继承方法;使得子类具有父类相同的行为。
  • 将一个已有类中的属性和方法保留,再加上自己特有的属性和方法形成一个新的类。即继承。通过extends实现
  • 继承可提高代码的可重用性继承要满足is-a的关系;不能为了部分继承关系而使用继承

1.构造器:

  • 在代码中定义了构造方法后会将默认的构造方法给覆盖掉;当调用子类的构造方法的时候先调用的父类的构造方法;先有父后有子
  • 要调用父类的构造方法;可用super关键字实现;若要调用父类特定的构造方法;则用super里面的参数确定;super()写在子类的构造函数中。特别注意:super一定要写在方法第一行如果父类中有构造方法;则子类必须实现其构造方法

2.关键字:

  • extends        {继承;父类与子类}
    • super        {用于引用父类的成员变量;方法或构造函数}

3.继承案例:

Animal类:

package JC;

public abstract class Animal {
    private int id;
    private int age;
    private String name;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Animal{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

Cat类:

package JC;

public class Cat extends Animal {
    @Override
    public String toString() {
        return "Cat{" +
                ",id=" + getId() +
                ",age=" + getAge() +
                ",name=" + getName() + '\'' +
                '}';
    }
}

Test测试类:

package JC;

public class Test {
    public static void main(String[] args) {
        Cat cat= new Cat();
        cat.setId(1);
        cat.setAge(3);
        cat.setName("小猫");
        System.out.println("Cat=" + cat);
    }
}

结果:

  • 重载:

方法名相同;参数列表不同;与返回值无关;在同一个类中发生。

参数列表不同;表示的是参数的个数,类型,顺序;构造方法就是个重载。

重载代码演示:

Animal类:

package JC;

public abstract class Animal {
    public Animal() {
        System.out.println("这是Animal构造方法(父类)");
    }
}

Cat类:

package JC;

public class Cat extends Animal {
    public Cat(){
        System.out.println("这是Cat构造方法(子类)");
    }
}

Test测试类:

package JC;

public class Test {
    public static void main(String[] args) {
        Cat cat= new Cat();
    }
}

结果:

  • 重写:

重写是发生在子类与父类之中的;并且二者的方法必须要具有相同的函数名称;参数列表;并且子类的返回值与父类相同或者是父类返回类型的子类型。

被重写的方法不能是私有的

  • 重载重写二者的区别:

重载:重载发生在一个类中;方法名一样参数列表不同且与返回值无关。

重写:重写是发生在父类和子类之间的;子类的方法名和父类的方法名需要保持一致返回值相同

如果子类的返回值类型和父类不一样那么子类返回值的类型是父类返回值的子类类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值