学习笔记——Java基础(一)

学习笔记——Java基础(一)

1、面向对象的三大特性

**答:**封装、继承、多态。

封装

将事物封装成一个类,减少代码耦合,隐藏代码细节。保留特定接口与外界联系。内部方法改动,不影响外部调用。

eg:将某个类的属性私有化,只有通过公共的get/set方法来传递数据,在get/set方法中我们可以对内部逻辑进行处理,外部调用方不必关心内部如何处理的。

继承

通过一个已知类派生出新的类,子类可以继承父类所有方法,并可以通过重写/覆盖来实现自己的方法。

注意:

  • Java不支持多继承,一个类只能有一个父类。

  • Java中的构造函数不可以被继承,如果构造函数被private修饰,那么就是不明确的构造函数,该类不可以被继承。具体原因:

    • Java中类的初始化顺序

      • 初始化父类中的静态成员变量和静态代码块
      • 初始化子类中的静态成员变量和静态代码块
      • 初始化父类中的普通成员变量和代码块,再执行父类的构造方法
      • 初始化子类中的普通成员变量和代码块,再执行子类的构造方法

      如果父类构造函数是私有的,则初始化子类的时候不可以被执行,所以为什么该类不可以被继承。

子类的特点:

  • 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问的,只是拥有因为在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类对象;
  • 子类可以添加自己的方法和属性,即对父类进行扩展
  • 子类可以重新定义父类的方法,即方法的覆盖/重写

什么叫覆盖/重写

指子类和父类之间方法的一种关系,比如父类拥有方法A,子类扩展了方法A并且添加了丰富的功能。那么这个就叫子类覆盖或者重写了方法A,也就是说子类的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。

多态

一个程序里存在多个同名的不同方法。实现多态的三个方法:

  1. 子类对父类的覆盖/重写来实现。(运行时多态)
  2. 在一个类中对方法重载实现。(编译时多态)
  3. 通过将子类对象作为父类对象来使用实现。

2.1什么叫重载

重载指在一个类中存在多个同名的不同方法(包括父类),这些方法的参数个数,顺序以及类型不同均可以构成方法的重载。如果仅仅是修饰符、返回值、抛出的异常不同,那么这是2个相同的方法。

DEMO

public class OverLoadTest {
 
    public void method1(String name, int age){
        System.out.println("");
    }
    // 两个方法的参数顺序不同,可以构成方法的重载
    public void method1(int age, String name){
        System.out.println("");
    }
    //---------------------------------------------
    public void method2(String name){
        System.out.println("");
    }
    // 两个方法的参数类型不同,可以构成方法的重载
    public void method2(int age){
        System.out.println("");
    }
 
    //---------------------------------------------
    public void method3(String name){
        System.out.println("");
    }
    // 两个方法的参数个数不同,可以构成方法的重载
    public void method3(int age, int num){
        System.out.println("");
    }
}

!!如果只有方法返回值不同,可以构成重载吗?

答:不可以。因为我们调用某个方法,有时候不关心其返回值(不能指定类型信息),这个时候编译器根据方法名和参数无法确定我们调用的是哪个方法。

比如:public String Test(String name){}和public void Test(String name){},调用的时候,直接Test(“xxx”);就会存在歧义。

3.1如何通过将子类对象作为父类对象使用来实现多态。

对象的引用型变量具有多态性,因为一个引用型变量可以指向不同形式的对象,即:子类的对象作为父类的对象来使用。这里涉及到了向上转型和向下转型。

向上转型:

子类对象转为父类,父类可以是接口。

公式:Father f = new Son();Father是父类或接口,Son是子类。

向下转型:

父类对象转为子类。公式:Son s = (Son) f;

在向上转型的时候我们可以直接转,但是在向下转型的时候我们必须强制类型转换。并且,如案例中所述,该父类必须实际指向了一个子类对象才可强制类型向下转型,即其是以这种方式Father f = new Son()创建的父类对象。若以Father f = new Father()这种方式创建的父类对象,那么不可以转换向下转换为子类的Son对象,运行会报错,因为其本质还是一个Father对象。

2、JDK、JRE和JVM的区别与联系有哪些?

  • JDK是开发工具包,用来开发JAVA程序,JRE是Java的运行时环境。
  • JDK和JRE中都包含了JVM
  • JVM是JAVA编程的核心,独立于硬件和操作系统,具有平台无关系,而这也是Java程序可以一次编写,多处执行的原因

Java语言的平台无关性是如何实现的?

  • JVM屏蔽了操作系统和底层硬件的差异
  • Java面向JVM编程,先编译生成字节码文件,然后交给JVM解释成机器码执行
  • 通过规定基本数据类型的取值范围和行为

Java语言是编译型还是解释型语言?

**答:**Java的执行经历了编译和解释的过程,是一种先编译,后解释执行的语言,不可以单独归到编译性或者解释性语言的类别中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值