java基础学习第3天

本文详细介绍了面向对象编程中的封装概念,强调了信息隐藏和访问控制的重要性,指出其能提高代码的安全性和复用性。同时,讲解了super关键字的使用规则,说明它在子类中调用父类构造方法和成员的场景。此外,讨论了多态的概念,通过实例展示了多态如何在同一方法中实现不同行为。最后,探讨了对象的强制类型转换及其在方法调用中的应用。
摘要由CSDN通过智能技术生成

面向对象

封装

  • 什么是封装?

    1. 程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;

      低耦合:仅暴露少量的方法给外部使用。

    2. 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

      例如我想在主程序里访问另外一个student对象的name属性,那我我们应该避免使用student.name

      去访问,而是按照封装的规范,属性私有,然后使用定义好的getName方法去访问。

  • 封装的意义何在?

    1. 提高代码的安全性

    2. 提高代码的复用性

    3. “高内聚”:封装细节,便于修改内部代码,提高可维护性

    4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和写作。

super

  • super注意点:

    1. super调用父类的构造方法,必须在构造方法的第一个

    2. super必须只能出现在子类的方法或者构造方法中!

    3. super和this不能同时调用构造方法!

  • VS this:

    1. 代表的对象不同:

      this:本身调用者是这个对象

      super:代表父类对象的应用

    2. 前提

      this:没有继承也可以使用

      super:只能在继承条件下才可以使用

    3. 构造方法

      this();本类的构造

      super();父类的构造!

多态

Peson是父类

public class Person {
    public void say(){
        System.out.println("我是Person");
    }
    public void teach(){
        System.out.println("我要讲课啦");
    }
}

Student继承Person类

public class Student extends Person{
    public void say(){
        System.out.println("我是Student");
    }
    public void write(){
        System.out.println("我要写作业了");
    }
}
  • 同一方法可以根据发送对象的不同而采取多种不同的行为方式

    public class Test {
        public static void main(String[] args) {
            Student s1=new Student();
            Person p1=new Person();
            p1.say();
            s1.say();
        }
    }
    
    

    输出结果:

    我是Person
    我是Student
    

    虽然Student类继承Person,但为什么s1.say()不输出我是Person呢,因为Student里也定义了一个say方法,里面是输出我是Student

  • 一个对象的实际类型是确定的,但可以指向对象的引用类型有很多

    public class Test {
        public static void main(String[] args) {
            Student s1=new Student();
            Person s2=new Student();
            Object s3=new Student();
        }
    }
    
  • 对象能执行哪些方法,主要看对象左边的类型,和右边关系不大

在这里插入图片描述

虽然Student类里有定义write方法和say方法;但是s2左边的引用类型是Person,里面没有write方法,所以提示错误;同理,所有类的父亲,Object类也没有say方法,也提示错误。

  • 对象的强制转化

    ((Student) s2).write();
    

法;但是s2左边的引用类型是Person,里面没有write方法,所以提示错误;同理,所有类的父亲,Object类也没有say方法,也提示错误。

  • 对象的强制转化

    ((Student) s2).write();
    

    虽然s2的引用类型是Person,但是强制转化成Student就可以调用Student里的write方法了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值