Java教程

Java基础封装、继承、多态、抽象类、接口

本文主要是介绍Java基础封装、继承、多态、抽象类、接口,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、封装

权限修饰符:

  java提供了三种访问权限,准确的说还有一种是默认的访问权限,加上它一共四种。

  • private   在当前类中可访问
  • default        在当前包内和访问
  • protected    在当前类和它派生的类中可访问
  • public          公众的访问权限,谁都能访问

  封装:是指隐藏对象的属性和实现细节,不允许外部直接访问,仅对外提供公共访问方式,这里就会用到一个关键字是private,在后面的使用成员变量时候,不能直接调动,只能通过方法调用;

     特点:1.只能通过规定的方法访问数据。

        2.隐藏类的实例细节,方便修改和实现。

  如何进行封装:

  (1)私有化成员变量,使用private关键字修饰;

  (2)提供公有的get和set方法,在方法体中进行合理值的判断,使用public关键字修饰;

二、继承

  什么是继承:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。

  实现:在Java中,使用extends关键字实现继承,extends后跟的是父类名,也就是它从哪个类继承过来的,而用extends的这个类本身称为子类。

  在java中,只允许单继承,也就是说 一个类最多只能显示地继承于一个父类。但是一个类却可以被多个类继承,也就是说一个类可以拥有多个子类。

  1.子类继承父类的成员变量

  当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:

  1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;

  2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

  2.子类继承父类的方法

  同样地,子类也并不是完全继承父类的所有方法。

  1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;

  2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  3)对于子类可以继承的父类成员方法,如果在子类中出现了同名的成员方法,称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

  注意:隐藏和覆盖是不同的。隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。

  3.构造器

  子类是不能够继承父类的构造器,但是要注意的是,如果父类的构造器都是带有参数的,则必须在子类的构造器中显示地通过super关键字调用父类的构造器并配以适当的参数列表。如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。

  4.super

  super主要有两种用法:

  1)super.成员变量/super.成员方法;

  2)super(parameter1,parameter2....)

  第一种用法主要用来在子类中调用父类的同名成员变量或者方法;第二种主要用在子类的构造器中显示地调用父类的构造器,要注意的是,如果是用在子类构造器中,则必须是子类构造器的第一个语句。

三、多态

  多态的概述:

  1、多态现实意义理解

  现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。

  Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。

  2、多态体现为父类引用变量可以指向子类对象。

  3、前提条件:必须有子父类关系。

  注意:在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

  4、多态的定义与使用格式

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

  5、理解:

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

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

  多态中成员的特点:

  1、多态成员变量:编译运行看左边(因为方法可以重写,成员变量不可重写)。
  Fu f=new Zi();

  System.out.println(f.num);//f是Fu中的值,只能取到父中的值

  2、多态成员方法:编译看左边,运行看右边。

  Fu f1=new Zi();

  System.out.println(f1.show());//f1的门面类型是Fu,但实际类型是Zi,所以调用的是重写后的方法。

  多态的转型:

  1、向上转型:多态本身就是向上转型过的过程。
  使用格式:父类类型 变量名=new 子类类型();

  适用场景:当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作。

  2、向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型。
  使用格式:子类类型 变量名=(子类类型) 父类类型的变量;

  适用场景:当要使用子类特有功能时。

  instanceof关键字:

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

四、抽象类

  概述:在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

  为什么抽象类不能直接实例化呢?

当一个类实例化之后,就意味着这个对象可以调用类中的属性或者方法了,但在抽象类里存在抽象方法,而抽象方法没有方法体,没有方法体就无法进行调用。既然无法进行方法调用的话,又怎么去产生实例化对象呢。

  抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

  由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

  在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

  抽象类的特点:

  1. 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
  2. 成员变量:可以是变量、常量。
  3. 构造方法:有构造方法,但是不可实例化,必须通过继承方式,用于子类访问父类数据的初始化(多态形式进行实例化)。
  4. 抽象类必须有子类,子类必须重写父类成员方法,或者子类必须是抽象类。
  5. 抽象类中未必有抽象方法,但是有抽象方法的类,肯定是抽象类。

  注意:虽然一个类的子类可以去继承任意的一个普通类,可是从开发的实际要求来讲,普通类尽量不要去继承另外一个普通类,而是去继承抽象类。

  抽象类的使用限制:

  (1)抽象类中有构造方法么?
  由于抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。
  并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。

  (2)抽象类可以用final声明么?
  不能,因为抽象类必须有子类,而final定义的类不能有子类;

  (3)抽象类能否使用static声明?

  不可以,static修饰的类,不可以被继承。

  (4)可以直接调用抽象类中用static声明的方法么?
  任何时候都可以,如果要执行类中的static方法的时候,都可以在没有对象的情况下直接调用,对于抽象类也一样。

  (5)抽象类能够使用private修饰吗?

  不可以,如果为private,则不能被子类继承,子类便无法实现该方法。

五、接口

  首先我们需要知道,Java语言只支持单重继承,不支持多继承。这句话的意思就是一个类只能有一个父类,但我们经常需要使用多继承来解决问题,所以Java语言提供了接口来实现类的多重继承功能。

  接口描述:接口就是一种公共的规范标准,更多体现在对行为的抽象。

  接口的特点:没有构造方法,只能通过实现该接口,以多态的形式进行创建对象。子类必须重写接口中的所有抽象方法,或者该子类就是抽象类。

  抽象类与接口的区别:

  成员区别:抽象类有常量、变量、构造方法、抽象方法,非抽象方法。接口只有常量,抽象方法。

  继承区别:抽象类只能单继承,可以多层继承。接口可以多实现。

  设计理念:抽象类主要是属性,接口主要是行为。

  接口的定义:

  Java中使用interface来定义一个接口,接口定义与类相似(类的定义用的是class)。

  接口的实现:

  实现接口需要在类中用implements关键字,可以多实现,接口中的方法必须都要重写。

 

这篇关于Java基础封装、继承、多态、抽象类、接口的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!