Java基础之面向对象特性

原文出处:Java基础之面向对象特性  关注码农爱刷题,看更多技术文章!!

【基本内容】

一、Java面向对象三大特性

图片

     总之,面向对象的三大特征:封装、继承和多态,是Java编程的重要基石。通过封装,我们可以隐藏对象的内部细节,保护数据的安全;通过继承,我们可以实现代码的重用和扩展;通过多态,我们可以使对象在不同的情况下表现出不同的行为。

二、权限访问修饰符

图片

三、类的构成及加载顺序

    Jave类实例化后就是对象,类和对象是Java面向对象的核心概念。Java类的构成主要包括静态变量、静态方法、静态块、初始化块、构造函数、成员变量、成员方法。

     其中静态变量、静态方法和静态块,是类层面的变量和方法以及初始化逻辑,不需要实例化就可以被访问和使用;如果有访问权限,类变量和类方法,可以通过“类名.”加上类变量名和类方法名访问;静态方法不能访问实例方法和变量;静态块在类加载时实例化之前被执行,且只会被执行一次。初始化块和构造函数用来初始化和构造类的实例,初始化块在构造函数调用之前被执行,每实例化一个对象,两者都会被执行一次;类实例化后,可以通过实例化后的对象访问成员变量和成员方法,成员变量和成员方法隶属于实例。

     类的初始化顺序如下:父类静态变量、父类静态块、当前类静态变量、当前类静态块、父类成员变量、父类初始化块、父类构造函数、当前类成员变量、当前类初始化块、当前类构造函数;静态代码块和初始化块在一个类中可以多次出现,通常会按它们的书写顺序执行。总之,初始化顺序一般遵循先父类后子类、先静态后成员的规则。

四、Java标识的命名规则

     Java语言中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符。标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的,命名的规则如下表:

图片

       此外,对类的源文件也说明一下,一个源文件可以声明多个类,但是只能声明一个public类,且源文件的名称要和这个public类命名保持一致;如果多个类都不声明为public类,类名可以不和任何类名称保持一致,但通常不建议这么做。

五、类成员修饰符

      类及其成员修饰符如下列图表: 

      1.类修饰符

图片

      2.变量修饰符

图片

    此外,方法内的局部变量只能用final修饰。

    3.方法修饰符

图片

    此外,构造函数作为一种特殊方法,只能被权限访问修饰符修饰,其他修饰符不适用。

、接口

     接口是Java中一种重要的抽象机制,它提供了一种定义行为规范和实现多态性的方式,是对Java类单继承的补充。接口的基础定义如下:


[修饰符]  interface 接口名{

   //默认修饰符 public static final
   [public static final]  数据类型  静态变量= 值; //可以定义多个
   
   //抽象方法,默认 public abstract
   [public abstract] 返回值类型 方法名 (形参列表);
}

     接口具有以下特性:     

图片

     JDK8允许接口中编写静态方法和默认方法,静态方法直接通过接口名可以调用,而默认方法只能通过实现接口的类的实例调用:


package com.briup.chap07.test;

//JDK8中接口 可以添加默认方法和static方法
interface JDK8Action {
  // 接口中静态常量
  String OPS_MODE = "auto";

  // 接口中抽象方法
  void start();  
  
   //下面是JDK8新特性
  //默认方法
  public default void stop() {
    System.out.println("in default stop() ...");
  }
  
  //静态方法
  public static void sFun() {
    System.out.println("in static fun() ...");
  }
}

class Demo01 implements JDK8Action {
  @Override
  public void start() {
    System.out.println("重写start() ...");
  } 
}

public class Test026_JDK8 {
  public static void main(String[] args) {
    //1.接口引用指向实现类对象
    JDK8Action a = new Demo01();
    
    //2.调用实现类重写方法
    a.start();    
    
    //3.调用default方法
    a.stop();
    
    //4.JDK8中接口可以定义static方法,只能通过接口名调用,但不能通过接口引用调用,也不能通过实现类名调用
    //a.sFun();  编译报错
    //Demo01.sFun(); 编译报错
    JDK8Action.sFun();
  }
}

  JDK9允许接口可以包含私有方法,案例如下:


package com.briup.chap07.test;

//使用interface关键字来定义接口
interface JDK9Action {
  // 接口中的静态常量
  String OPS_MODE = "auto";

  // 接口中的抽象方法
  void start();
  
    //私有方法 jdk9以下报错
  private void run() {
      System.out.println("private run() ...");
    }
}

class Demo02 implements JDK8Action {
  @Override
  public void start() {
    System.out.println("重写start() ...");
  }
}

//测试类
public class Test026_JDK9 {
  public static void main(String[] args) {
      //1.接口引用指向实现类对象
    JDK9Action a = new Demo02();
        
        //2.调用实现类重写的抽象方法
        a.start();
        
        //3.调用接口private方法
        a.run();
    }
}

七、抽象类

     抽象类是Java中一种不能被实例化的类,它可以包含一些抽象的未实现的方法让继承它的子类去实现。抽象类中可以不定义抽象方法甚至任何方法,但是定义了抽象方法的类一定是抽象类。它和接口都是Java中的抽象机制,两种的区别如下:

      定义方式:抽象类通过使用 abstract 关键字来定义,而接口使用 interface 关键字来定义。

      数据成员:抽象类可以包含普通数据成员和static数据成员,而接口只能包含 static final 修饰的数据成员。

      成员方法:抽象类可以包含具体的方法实现,而接口只能包含抽象方法,即没有方法体的方法声明,当然在JDK8以后有所改变。

      构造函数:抽象类可以有构造函数,而接口不能有构造函数,但是两者都不能实例化。

      多继承:Java不支持多继承,一个类只能extends一个抽象类,而一个类可以implements多个接口。

【注意事项】

1.命名规则中的中文字符:虽然Java的命名规则中没有特意提到中文字符,但事实上,无论类名、变量名、方法名都可以用中文字符,甚至是全中文字符,尽管Java命名规范不建议。

2.内部类内部类也算是Java类的组成部分之一,但内部类涉及的知识点不少,后面单独章节说明;此处,要说的是,当一个类是内部类的时候,关键字class声明前可以被所有权限访问修饰符(public、protected、private和default)修饰,也可以被static修饰。

原文出处:Java基础之面向对象特性  关注码农爱刷题,看更多技术文章!!

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值