美文网首页
Java的基本特性

Java的基本特性

作者: ClawHub的技术分享 | 来源:发表于2018-12-06 11:12 被阅读0次

关系

Java的四个基本特性分别是抽象,封装,继承,多态。概括起来可以这么理解,抽象、封装、继承是多态的基础,多态是抽象、封装、继承的表现。

①抽象

父类为子类提供一些属性和行为,子类根据业务需求实现具体的行为。抽象类使用abstract进行修饰,子类要实现所有的父类抽象方法否则子类也是抽象类。

②封装

把对象的属性和行为(方法)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,在java中,对于对象的内部属性一般用private来实现隐藏,并通过set和get方法对外提供访问接口。

下面看一下封装的步骤

A.下面看一下访问权限级别:

B.this关键字

 1.this关键字代表当前对象

  this.属性 操作当前对象的属性

  this.方法 调用当前对象的方法。

 2.封装对象的属性的时候,经常会使用this关键字。

 3.当getter和setter函数参数名和成员函数名重合的时候,可以使用this区别。如:

C.内部类 

内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

内部类的主要作用如下:

1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。

2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。

请查看另一篇文章,是云开的初夏大佬写的

链接:http://www.cnblogs.com/hysum/p/7101974.html

③继承

子类继承父类的属性和行为,并能根据自己的需求扩展出新的属性和行为,提高了代码的可复用性。Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类(有的也称其为基类、超类),父类和子类的关系,是一种一般和特殊的关系;子类扩展父类,将可以获得父类的全部属性和方法。

A、方法的重写

子类可以重写继承的父类方法,这种方式就称为方法的重写。当调用方法时会优先调用子类的方法,重写要注意:

 1.返回值类型,方法名 ,参数类型及个数都要与父类继承的方法相同,才叫方法的重写。

     2.当子父类中出现相同方法时,会先运行子类中的方法。

B、继承的初始化顺序

 1、初始化父类再初始化子类

 2、先执行初始化对象中属性,再执行构造方法中的初始化。

 基于上面两点,我们就知道实例化一个子类,java程序的执行顺序是:

 父类对象属性初始化---->父类对象构造方法---->子类对象属性初始化--->子类对象构造方法

C、final关键字

 使用final关键字做标识有“最终的”含义。

 1. final 修饰类,则该类不允许被继承。

 2. final 修饰方法,则该方法不允许被覆盖(重写)。

 3. final 修饰属性,则该类的该属性不会进行隐式的初始化,所以 该final 属性的初始化属性必须有值,或在构造方法中赋值(但只能选其一,且必须选其一,因为没有默认值!),且初始化之后就不能改了,只能赋值一次。

 4. final 修饰变量,则该变量的值只能赋一次值,在声明变量的时候才能赋值,即变为常量。

D、super关键字

 在对象的内部使用,可以代表父类对象。

 1、访问父类的属性:super.age

 2、访问父类的方法:super.eat()

 super的应用:

 首先我们知道子类的构造的过程当中必须调用父类的构造方法。其实这个过程已经隐式地使用了我们的super关键字。

 这是因为如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。

 那么如果自己用super关键字在子类里调用父类的构造方法,则必须在子类的构造方法中的第一行。

 要注意的是:如果子类构造方法中既没有显示调用父类的构造方法,而父类没有无参的构造方法,则编译出错。

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

E、Object类

 Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另一个类,那么这个类默认继承Object类。

 那么Object类中有什么主要的方法呢?

 a.toString()

  1. 在Object类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串)。

  我们可以发现,如果我们直接用System.out.print(对象)输出一个对象,则运行结果输出的是对象的对象地址字符串,也称为哈希code码。如Outer@140e19d。

  哈希码是通过哈希算法生成的一个字符串,它是用来唯一区分我们对象的地址码,就像我们的身份证一样。

  2. 可以通过重写toString()方法表示出对象的属性。

  如果我们希望输出一个对象的时候,不是它的哈希码,而是它的各个属性值,那我们可以通过重写toString()方法表示出对象的属性。

 b.equals()

  1.equals()----返回值是布尔类型。

  2.默认的情况下,比较的是对象的引用是否指向同一块内存地址-------对象实例化时,即给对象分配内存空间,该内存空间的地址就是内存地址。使用方法如:String1.equals(String2);

  3.如果是两个对象,但想判断两个对象的属性是否相同,则重写equals()方法。

④多态

什么是多态:

不同类的对象对同一消息作出不同的响应就叫做多态。就像上课铃响了,上体育课的学生跑到操场上站好,上语文课的学生在教室里坐好一样。

多态的作用:

简单讲就是解耦。再详细点讲就是,多态是设计模式的基础,不能说所有的设计模式都使用到了多态,但是23种中的很大一部分,都是基于多态的。

多态存在的三个条件:

1、有继承关系

2、子类重写父类方法

3、父类引用指向子类对象

补充一下第二点,既然多态存在必须要有“子类重写父类方法”这一条件,那么以下三种类型的方法是没有办法表现出多态特性的(因为不能被重写):

1、static方法,因为被static修饰的方法是属于类的,而不是属于实例的

2、final方法,因为被final修饰的方法无法被子类重写

3、private方法和protected方法,前者是因为被private修饰的方法对子类不可见,后者是因为尽管被protected修饰的方法可以被子类见到,也可以被子类重写,但是它是无法被外部所引用的,一个不能被外部引用的方法,怎么能谈多态呢

多态的分类

1、编译时多态,即方法的重载,从JVM的角度来讲,这是一种静态分派(static dispatch)

2、运行时多态,即方法的重写,从JVM的角度来讲,这是一种动态分派(dynamic dispatch)

分析多态的几条原则

如果不去理解多态的原理,就从使用的角度来讲,以个人的学习、工作这几年的经验,总结出了多态无非就是三句话:

比如我们有一个父类Father,有一个子类Children

1、向上转型是自动的。即Father f = new Children()是自动的,不需要强转

2、向下转型要强转。即Children c = new Father()是无法编译通过的,必须要Children c = (Children)new Father(),让父类知道它要转成具体哪个子类

3、父类引用指向子类对象,子类重写了父类的方法,调用父类的方法,实际调用的是子类重写了的父类的该方法。即Father f = new Children(),f.toString()实际上调用的是Children中的toString()方法

⑤ 重写与重载 的区别

相关文章

  • java基本特性

    封装、抽象、集成、多态。 1:抽象   将事物的共同特性提取出来构建类的过程,包括属性、行为等。   比如:皮卡、...

  • Java的基本特性

    关系 Java的四个基本特性分别是抽象,封装,继承,多态。概括起来可以这么理解,抽象、封装、继承是多态的基础,多态...

  • Java11的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java15的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java12的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java枚举的几个用法探索

    枚举是java 5之后添加的一个重要特性,这个特性可以让java程序员写出更优雅、合理的代码。 1. 枚举基本用法...

  • 枚举的花式使用方法

    本文参照《On Java8》 基本的枚举特性 枚举除了简单的应用之外,我们还可以使用它的基本的特性。 如上述程序所...

  • java总结

    Java是一门面向对象编程语言. java知识点梳理 java面向对象的特点java面向对象的三个基本特性: 封...

  • Java研发方向如何准备BAT技术面试

    Java基础: 面向对象和面向过程的区别 Java的四个基本特性(抽象、封装、继承,多态) Overload和Ov...

  • Java研发方向如何准备BAT技术面试

    Java基础: 面向对象和面向过程的区别 Java的四个基本特性(抽象、封装、继承,多态) Overload和Ov...

网友评论

      本文标题:Java的基本特性

      本文链接:https://www.haomeiwen.com/subject/flmncqtx.html