Java教程

面向对象-JAVA

本文主要是介绍面向对象-JAVA,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

面向对象就是:

把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象
 

对象:对象是类的一个实例

:类是一个模板,它描述一类对象的行为和状态

面向对象的三大特性:封装,继承,多态

①封装

两层含义:一层含义是把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单元(即对象)中;另一层含义指“信息隐藏”,把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为,则不允许外界知晓,或只允许使用对象的功能,而尽可能隐藏对象的功能实现细节。

封装的优点

    良好的封装能够减少耦合,符合程序设计追求“高内聚,低耦合”。

    类内部的结构可以自由修改。

    可以对成员变量进行更精确的控制。

    隐藏信息实现细节。
 

this与super关键字:

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

2、super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

构造方法:在类中一旦自己定义了构造方法,系统将不再提供默认的无参构造方法

②继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

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

类的继承格式:

class 父类 { }

class 子类 extends 父类 { }

继承的类型:需要注意的是 Java 不支持多继承,但支持多重继承。
 

 final关键字:

表示最终的意思,可以修饰类、成员变量、成员方法

  • 修饰类:类不可以被继承
  • 修饰成员变量:变量为常量,值不可以改变
  • 修饰成员方法:方法不能被重写
  • final还可以修饰局部变量:①修饰基本数据类型,值不能改变;②修饰引用数据类型,地址值不能改变

构造代码块

每次创建对象都会执行一次

public class Demo01 {
    {
        System.out.println("构造代码块");
    }
    Demo01(){
        System.out.println("无参构造函数");
    }
    Demo01(int a){
        System.out.println("有参构造函数");
    }
}
Demo01 demo01 = new Demo01();
Demo01 demo02 = new Demo01(18);

输出

构造代码块
无参构造函数
构造代码块
有参构造函数

③多态

Java语言中含有方法重载与对象多态两种形式的多态:

方法重载:在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。

对象多态:子类对象可以与父类对象进行转换,而且根据其使用的子类不同完成的功能也不同(重写父类的方法)。

面试题:什么是多态?实现多态的方法有哪些?

多态是面向对象的最后一个主要特征,它本身主要分为两个方面:
       ·方法的多态性:重载与覆写
            |-重载:同一个方法名称,根据不同的参数类型及个数可以完成不同的功能。
            |-覆写:同一个方法,根据操作的子类不同,所完成的功能也不同。
       ·对象的多态:父子类对象的转换。
            |-向上转型:子类对象变为父类对象,格式:父类 父类对象 = 子类实例,自动;
            |-向下转型:父类对象变为子类对象,格式:子类 子类对象 = (子类)父类实例,强制。

多态的实现方式

方式一:重载与重写:

这个内容已经详细讲过,就不再阐述,详细请见上文。

方式二:抽象类和抽象方法

在Java中,一个没有方法体的方法称为抽象方法。而一个类中如果有抽象方法,那么这个类就称之为抽象类。

格式:
    抽象类:abstract class 类名{}
    抽象方法:修饰符 abstract 返回值类型 方法名(参数列表){方法体;}

特点:
    1)抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类
    2)抽象类不可以实例化(不能用new关键字创建抽象类实例)
    3)抽象类的子类,可以是抽象类,也可以是具体类。如果子类是具体类,需要重写抽象类里面所有抽象方法

组成:
    1)成员变量
        可以是变量,可以是常量
    2)构造方法
        有构造方法
        抽象类不可以实例化,存在构造方法,有什么用?
        子类会调用父类的构造方法,对属性进行初始化赋值
    3)成员方法
        可以是抽象方法,也可以是具体方法

方式三:接口

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。实际上是一个规范,它会要求你做什么,但不会要求你去怎么做。接口里面定义的是额外功能,但是不给出具体的实现。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

接口与类相似点:

    一个接口可以有多个方法。
    接口文件保存在 .java 结尾的文件中,文件名使用接口名。
    接口的字节码文件保存在 .class 结尾的文件中。
    接口相应的字节码文件必须在与包名称相匹配的目录结构中。

接口与类的区别:

    接口不能用于实例化对象。
    接口没有构造方法。
    接口中所有的方法必须是抽象方法。
    接口不能包含成员变量,除了 static 和 final 变量。
    接口不是被类继承了,而是要被类实现。
    接口支持多继承。

接口特性:

    接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
    接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
    接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

抽象类和接口的区别:

    1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
    2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
    3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
    4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

接口的多继承

接口和接口继承关系,可以单继承,多继承,多级继承
 

这篇关于面向对象-JAVA的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!