JAVA面向对象三大特征

本文深入解析了Java中的封装、继承与多态三大核心概念,包括封装的抽象接口隐藏实现、继承的代码复用与子类重写、以及多态的动态调用原理。通过实例演示,展示了如何在实际编程中运用这些特性提升代码灵活性和安全性。
摘要由CSDN通过智能技术生成

封装

封装:什么是封装,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

通俗一点来说就是把类中的某些信息进行隐藏,从而使外部程序不能直接对这些信息进行直接的访问,只能通过类中定义的方法对这些隐藏的信息进行操作和访问。

目的:使其他类只能通过操控类中的对象来直接达到目的,不能看到具体的实现和属性,从而提高了程序的安全性和便利性。隐藏信息,实现便利。

访问权限

在这里插入图片描述

public class User {

    private Integer id;
    private String username;

    public Integer getId() { //对外暴露操作类属性的接口
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

继承

Java中的继承是指在一个现有类(父类)的基础上在构建一个新类(子类),子类可以拥有父类的成员变量以及成员方法。目的是提高代码可用性。

super和this

在这里插入图片描述
重写:需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表必须相同
3.返回类型,稍微松动,允许返回被覆盖方法返回类型的子类
3.修饰符:范围可以扩大但不能缩小:public>Protected>Default>private
4.抛出的异常:范围,可以被缩小,但不能扩大; ClassNotFoundException --> Exception(大)

public class father {
    String name;
    private int id;
    public void run(){
        System.out.println("father run");
    }

    public static void main(String[] args) {
        father father = new father();
        father.run();//father run
        son son = new son();
        son.run();//song run
        son.method();// father run      son run
        System.out.println(son.name);
    }
}
class son extends father{
    public void run(){
        System.out.println("son run");
    }
    public void method(){
        super.run();//调用父类的方法
        super.name="tom";//设置父类非私有属性
//        super.id = 12; 报错,不能设置父类私有属性
        this.run();//调用本类方法
    }
}

多态

多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用不同子类型的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性
————————————————
版权声明:本文为CSDN博主「adobehu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huzecom/article/details/101108618

多态实现的三个重要条件:
继承、重写、父类引用指向子类对象:Parent p = new Child();

运行时多态(函数的重写)

  • 向上转型时,子类如果没有重写父类中的一些方法,那么调用时调用的是父类的方法;如果子类重写了父类的方法,调用的时候调用的是子类的方法。只要是被子类覆盖的方法,在调用的时候都会调用子类的方法
  • 向上转型既能调用父类的方法,也能调用子类的方法(在向上转型时,子类单独定义的方法会丢失。)
  • 向下转型:向下转型之前,你必须得先向上转型
  • 当父类对象引用变量引用子类对象时,被引用对象的类型决定了调用谁的成员方法,引用变量类型决定可调用的方法。如果子类没有覆盖该方法,那么会去父类中寻找*

https://blog.csdn.net/wangkaiwenjbb/article/details/80144365* https://www.cnblogs.com/moxia/p/5837546.html

/**
 * @author:LI
 * @Date:2022/8/20 19:32
 **/
public class father {
    public void run(){
        System.out.println("father run");
    }
    public void fatherMethod(){
        System.out.println("fatherMethod");
    }

    public static void main(String[] args) {
      father father = new son();//向上转型,
      father.run();// son run  父类调用子类重写的部分
      father.fatherMethod();//fatherMethod
//      father.sonMethod(); 报错,父类引用不能调用子类拓展的方法,向上转型时,子类单独定义的方法会丢失


        /** 只有向下转型之后才能调用子类特有的方法*/
        son son =(son)father;
        son.sonMethod();//sonMethod
        son.run();//son run
        son.fatherMethod();//fatherMethod

//      正常调用自己的方法和父类方法
        son son1 = new son();
        son1.fatherMethod();//fatherMethod
        son1.run();//son run

    }
}
class son extends father{

    @Override
    public void run(){
        System.out.println("son run");
    }
    public void sonMethod(){
        System.out.println("sonMethod");
    }

}

编译时多态(函数的重载)

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
1、被重载的方法必须改变参数列表(参数个数或类型不一样);
2、被重载的方法可以改变返回类型;
3、被重载的方法可以改变访问修饰符;
4、被重载的方法可以声明新的或更广的检查异常;
5、方法能够在同一个类中或者在一个子类中被重载。
6、无法以返回值类型作为重载函数的区分标准。
--------------菜鸟教程https://www.runoob.com/java/java-override-overload.html

public class overload {
    void a(){
        System.out.println("null");
    }
    int a(int a){
        System.out.println(a);
        return 123;
    }
    void a(String a){
        System.out.println(a);
    }

    public static void main(String[] args) {
        overload overload = new overload();
        overload.a();//null
        System.out.println(overload.a(11));//11 123
        overload.a("hello world");//hello world
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值