基础总结----Java 面向对象的三大特性

Java 面向对象的三大特性

1.封装

封装的主要目的:是为了保护信息。将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

优点

1.阻止在外部定义的代码随意访问内部代码和数据。
2.隐藏细节信息,一些不需要程序员修改和使用的信息。比如取款机中的键盘,用户只需要只要按哪个键实现哪个操作就可以,不需要知道内部是如何运行的,
3.建立系统的松耦合关系,提高系统的独立性。当一个系统的实现方式发生变化时,只要它的接口不变,就不会影响其他系统的使用。例如 U 盘,不管里面的存储方式怎么改变,只要 U 盘上的 USB 接口不变,就不会影响用户的正常操作。
4.提高软件的复用率,降低成本。每个系统都是一个相对独立的整体,可以在不同的环境中得到使用。例如,一个 U 盘可以在多台电脑上使用。

Java 语言的基本封装单位是类。由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制。Java 提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西,私有的方法数据只能通过该类的成员代码来访问,这就可以确保不会发生不希望的事情。

1.访问修饰符

访问修饰符本类同包子类其他
private
默认
protected
public

2.this关键字
this表示当前对象,函数参数名和成员函数名重合的时候,可以使用this区别

3.JAVA中的内部类
内部类:是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。
分为:
(1)成员内部类
(2)静态内部类
(3)方法内部类
(4)匿名内部类:1.声明一个抽象类(abstract)2.声明一个接口(interface)。必须继承一个类或者实现一个接口。不可兼得。
作用:
(1)内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
(2)内部类的方法可以直接访问外部类的所有数据,包括私有数据。
(3)内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。
(4)匿名内部类可以方便的定义回调
(5)使用内部类可以非常方便的编写事件驱动程序。

2.继承 inheritance

继承是类与类之间的一种关系。继承已存在的类,就是复用(继承)这些类的方法和域。是 “is a”的关系。
eg.狗继承动物,动物类:父类或者基类;狗类是动物类的子类或者派生类。
Java中是单继承,即一个类只有一个父亲。

优点

子类拥有父类的所有属性和方法(除了private修饰的属性不能拥有)。实现代码复用。

关键字:extends

eg. class Dog extends Animal{…}

1.方法的重写
子类如果对继承的父类的方法不满意,可以自己编写继承的方法。即方法的重写。当调用方法是会优先调用子类的方法。
注意:返回值类型;方法名;参数类型及个数-----需要与父类继承的方法相同, 才叫方法的重写。
方法重载:同一个类处理不同数据的多个相同方法名的多态手段。
方法重写:继承,子类中对父类已存在的方法进行修改。

2.继承的初始化顺序
先初始化父类,再初始化子类
先执行初始化对象中属性, 再执行构造方法中的初始化。
所以:实例化一个子类,java程序的执行顺序为,
父类对象属性初始化------->父类对象构造方法----->子类对象属性初始化----->子类对象构造方法。
https://www.cnblogs.com/rove888/p/9936109.html
3.final关键字
(1)修饰类,不允许被继承
(2)修饰方法,不允许被覆盖(重写)
(3)修饰属性,不会进行隐形的初始化,所以初始化时必须有值,或在构造方法中赋值(只能赋值一次)
(4)修饰变量,声明变量的时候才能复制,即为常量。

4.super关键字
在对象的内部使用,可以代表父类对象。
(1)访问父类的属性,super.age()
(2)访问父类的方法,super.eat()
子类的构造过程中必须调用父类的构造方法。这就隐式的使用了super关键字。因为如果子类的构造方法中没有显式调用父类的构造方法,则系统默认调用父类无参的构造方法。那如果自己用super关键字在子类里调用父类的构造方法,则必须在子类的构造方法的第一行
如果子类构造方法中既没有显式调用父类的构造方法,父类也没有无参的构造方法,则编译出错。

(补充说明,虽然没有显式声明父类的无参的构造方法,系统会自动默认生成一个无参构造方法,但是,如果你声明了一个有参的构造方法,而没有声明无参的构造方法,这时系统不会动默认生成一个无参构造方法,此时称为父类没有无参的构造方法。)

5.Object类
是所有类的父类。如果一个类没有extends关键字,默认继承Object类。
Object中的方法适用于所有的子类。

  1. toString() :返回对象的名字@哈希code。
/*Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
       getClass().getName() + '@' + Integer.toHexString(hashCode())
       
Returns:
a string representation of the object.*/

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

可以重写。表示出对象的属性
在这里插入图片描述
运行结果:
在这里插入图片描述

  1. equals():
    返回boolean
    比较的是对象的应用是否相同,是否指向同一块内存地址。
    eg. dog.equals(dog2);
    如果是两个对象,判断两个对象的属性,则重写equals()方法。
    getClass()可以得到类对象,判断类型是否一样-----if (getClass() != obj.getClass()),不一样则返回false
    在这里插入图片描述
    可以参考:https://blog.csdn.net/zzy372219506/article/details/90934987

3.多态

多态就是对象的多种形态。
1.引用多态;
2.方法多态。

员工
经理
。。。

参考:
内部类:

  • [1] https://www.cnblogs.com/hysum/p/7101974.html
  • [2] https://www.cnblogs.com/rove888/p/9936109.html
  • [3] http://c.biancheng.net/view/939.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值