Java三大特性

Java三大特性

封装

封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但是可以提供一些可以被外界访问的方法来操作属性。如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。

继承

**概念:**继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

不同类型的对象,相互之间经常有一定数量的共同点。例如,小明同学、小红同学、小李同学,都共享学生的特性(班级、学号等)。同时,每一个对象还定义了额外的特性使得他们与众不同。例如小明的数学比较好,小红的性格惹人喜爱;小李的力气比较大。继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承,可以快速地创建新的类,可以提高代码的重用,程序的可维护性,节省大量创建新类的时间 ,提高我们的开发效率。

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承可以提高代码复用性。继承是多态的前提。

关于继承如下 3 点请记住:

  1. 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  3. 子类可以用自己的方式实现父类的方法。

分类:

根据继承的特性可以分为纯继承与扩展。

纯继承关系是纯粹的“is-a”(是一种)关系,因为一个类的接口已经确定了它应该是什么。继承可以确保所有的导出类具有基类的接口,且绝对不会少。基类可以接收发送给导出类的任何消息,因为二者有着完全相同的接口。

扩展关系“is-like-a”(像一个)关系,导出类就像是一个基类——它有着相同基类的基本接口,但是它还具有由额外方法实现的其他特性。导出类中接口扩展部分不能被基类访问,因此,一旦向上转型,就不能调用那些新方法

A extends B , B a =new A(); B向上转型为A 的对象

A a1 =(A) a; 向下转型(要先向上转型),此时,a1可以调用扩展方法

特性:

Java 语言的继承是单继承,不允许一个类继承多个父类。

继承最重要的方面是用来表现新类和基类之间的关系。这种关系可以用“新类是现有类的一种类型”。

  • 继承可以把新类向上转换成基类,这是向上转型的一种表现。

  • 由导出类转型成基类,在继承图上是向上移动的。

  • 向上转型是从一个较专用类型向较通用类型转换。

  • 导出类是基类的一个超集。它可能比基类含有更多的方法,但它必须至少具备基类中所有的方法。

优缺点:

在面向对象语言中,继承是必不可少的、非常优秀的语言机制,它有如下优点:

  • 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;
  • 提高代码的重用性;
  • 子类可以形似父类,但又异于父类;
  • 提高代码的可扩展性,实现父类的方法就可以“为所欲为”了。
  • 提高产品或项目的开放性。

自然界的所有事物都是优点和缺点并存的,继承的缺点如下:

  • 继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法;
  • 降低代码的灵活性。子类必须拥有父类的属性和方法,让子类自由的世界中多了些约束;
  • 增强了耦合性。当父类的常量、变量和方法被修改时,需要考虑子类的修改,而且在缺乏规范的环境下,这种修改可能带来非常糟糕的结果——大段的代码需要重构。

多态

多态,顾名思义,表示一个对象具有多种的状态。具体表现为父类的引用指向子类的实例。

**定义格式:**父类类型 变量名=new 子类类型();

理解:

​ 多态是同一个行为具有多个不同表现形式或形态的能力。

​ 多态就是同一个接口,使用不同的实例而执行不同操作。

多态的前提:
  1)要有继承关系实现关系(接口);
  2)要有方法重写
  3)要有父类或者父接口引用指向子类`Fu f= new Zi();
    注意:形参实参形式的(形参父类实参子类)

成员特点:

1、成员变量(编译运行全看父类)

编译的时候,参考父类中有没有这个变量,如果有,编译成功,没有编译失败

运行的时候,运行的是父类中的变量值

2、成员方法(编译看父类,运行看子类)

编译的时候, 参考父类中有没有这个方法,如果有,编译成功,没有编译失败

运行的时候, 运行的是子类的重写方法

特例:调用静态成员方法时,运行看父类。原因:静态属于类,不属于对象。不new对象,也可调用父类的静态方法,直接用类名调用。

多态的特点:

  • 对象类型和引用类型之间具有继承(类)/实现(接口)的关系;
  • 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定;
  • 多态不能调用“只在子类存在但在父类不存在”的方法;
  • 如果子类重写了父类的方法,真正执行的是子类覆盖的方法,如果子类没有覆盖父类的方法,执行的是父类的方法。

多态的类型:

如果在编译时能够确定执行多态方法称为编译时多态,否则称为运行时多态。

编译时多态

方法重载都是编译时多态—对于多个同名方法,如果在编译时能够确定执行同名方法中的哪一个,则称为编译时多态性.。

运行时多态

如果在编译时不能确定,只能在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态性

Person p = new Man();   
p.toString();

Java支持运行时多态,意为p.toString()实际执行p所引用实例的toString(),究竟执行Person类还是Man类的方法,运行时再确定。如果Man类声明了toString()方法,则执行之;否则执行Person类的toString()方法。

多态的好处:

  1. 可替换性(substitutability)。多态对已存在代码具有可替换性。
  2. 可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。
  3. 接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
  4. 灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
  5. 简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

instanceof关键字

作用:用来判断某个对象是否属于某种数据类型。

  • 注意: 返回类型为布尔类型

    使用案例:

        Fu f1=new Zi();
        Fu f2=new Son();

        if(f1 instanceof Zi){
            System.out.println("f1是Zi的类型");
        }
        else{
            System.out.println("f1是Son的类型");
        }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值