Java基础知识复习总结

以下内容是对Java基础知识部分的一个记录和总结,以记录最近在重新学习Java基础部分知识的感悟和收货。俗话说温故而知新,对于编程语言来说同样如此。为什么从基础开始呢,因为基础真的是很重要,基础稳固扎实,你才有可能进步成长,否则,对于技术这条路,不可能有长远的发展。所以,一切都要从基础开始,基础学习的扎实了,对于后面的框架及原理才能更好的掌握,否则,只能说是雾里看花,说到这里,我觉得有句话讲的特别好~~“万地高楼平地起,勿在浮沙筑高台。”
这句话洽恰说明了基础的重要性,盖楼讲究的是地基牢固,对于技术的学习也是如此,掌握了基础,才有可能往后有长足的发展。好,废话不多说,以下是对Java基础知识的一些总结,不足之处,欢迎指正。
因为Java语言是面向对象的编程语言,我们就先从面向对象说起。面向对象都知道有三大特性:1.封装。2.继承。3.多态
这三个概念我相信学过编程语言的基本都知道,但是,真正理解掌握的人我觉得不多。
接下来我就针对以上的三个特性逐条的谈下个人的理解。

继承

继承是什么?
在Java当中继承的关键字是 extends,表示一个类可以继承于另一个类,然后直接使用这个类的当中的属性(成员变量)和方法(函数)。
其实就是子父类继承的概念,子类可以使用父类中的属性和方法,而父类不能直接使用子类的方法。当我们让子类的对象进行初始话时,会首先进行对这个子类的父类的进行初始化,初始化包括成员变量的初始化和构造器的初始话,待父类的初始话结束后在进行子类的初始化工作,即变量和构造器的初始话,这是由于继承的特性所决定的。

  1. 当显示的指定super时,会调用父类指定的那个构造器方法,否则会隐性的调用父类的无参构造器方法,而不会说就不进行调用。即使在子类代码中没有显示的书写super也会存在无参的构造器。
/**
 * 父类
 */
public class Parent {
    private String name;
    private Integer age;

    public Parent() {
    }

    public Parent(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public Parent(String name) {
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void test() {
        System.out.println("Parent name = " + name);
    }
}
/**
  * 子类
  */
public class Children extends Parent {
    private String name;
    private String skill;

    public Children(String name, Integer age, String skill) {
        super();
        this.name = name;
        this.skill = skill;
    }
    @Override
    public void test() {
        System.out.println("name = " + name);
    }
    public static void main(String[] args) {
        Children children = new Children("小明", 18, "唱歌");
        System.out.println("children = " + children);
    }
}
  1. 在父类当中有的成员变量,子类当中也有的话,(名字类型完全相同),子类当中使用的就是子类自己的成员变量,而不是父类的,而当在父类中时,使用的就是父类自己的。
  2. 子父类中还存在方法的重写的概念,通常在子类重写的方法上会有@Override注解。

继承的目的及作用?
在子父类继承中我觉得的继承的特性是对抽象化的一种运用,及对封装的一种体现。在使用继承特性时,也要遵循六大设计原则中的里式替换原则。即所有引用基类的地方必须能够透明的使用其子类的对象。
在使用继承时,遵循里式替换原则,在子类中进行不要重写和重载父类的方法。
继承包含这样一层含义:父类中凡是已经实现好的方法(相对抽象方法而言),实际上是在设定一系列的规范和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些非抽象方法任意修改,就会对整个继承体系造成破坏。而里氏替换原则就是表达了这一层含义。
继承作为面向对象三大特性之一,在给程序设计带来巨大便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障。我们在编写程序的过程中其实追求的就是抽象和解耦的思想。

多态

  1. 多态是什么?
    多态是同一个行为具有不同表现形式或形态的能力。
    多态就是同一个接口,使用不同的实例而执行不同的操作。多态性是对象多种表现形式的体现。
    个人认为多态是一个比较抽象的概念,不是很好理解。
  2. 多态存在的三个必要条件
    · 继承
    · 重写
    · 父类引用指向子类对象
    以下代码就是对多态的一种具体的展示
	// 父类
	    public void test() {
        System.out.println("Parent name = " + name);
    }
	// 子类 
    @Override
    public void test() {
        System.out.println("name = " + name);
    }
        Parent parent = new Children("小红", "跳舞");
        parent.test();
        // 输出结果 name = 小红
  1. 子类和子类型
    • 类定义了类型
    • 子类定义了子类型
    • 子类的对象可以被当做父类的对象来使用
    • 子类的对象可以赋值给父类的变量 Parent parent = new Children();
    • 传递给需要父类对象的函数
      DVD dvd = new Dvd("DVD"); CD cd = new CD("CD"); db.add(dvd); db.add(cd);
    • 放进存放父类对象的容器里
        List<String> list = new ArrayList();
        list.add("CD");
        list.add("DVD");
  1. 多态变量
    • Java的对象变量是多态的,他们能保存不止一种类型的对象
    • 可以保存的是声明类型的对象或者声明类型的子类的对象
    • 当把子类的对象赋给父类的变量的时候,就发生的向上造型(cast)
      父类 父 = new 子类
      向上造型:
    • 拿一个子类的对象,当做父类的对象来用
    • 向上造型是默认的,不需要运算符
    • 向上造型总是安全的

这种是类型转换(强转)

        Parent parent = new Parent();
        Children children = (Children) parent;

这种的不安全的,内部实际上还是Parent的类型,会发生ClassCastException的异常
· 用括号围起来类型放在值的前面
· 对象本身并没有发生任何变化,所有不是“类型转换”
· 运行是有机制检查是否可以转换 ClassCastException

  1. 什么是函数调用的绑定?
  • 当通过对象变量调用函数的时候,调用哪个函数这件事情叫做绑定。
  • 静态绑定: 根据变量的声明类型来决定
  • 动态绑定: 根据变量的动态类型来决定
  • 在成员函数中调用其他成员函数也是通过this这个对象变量来调用的
  1. 覆盖 override
  2. 子类和父类中存在名称和参数完全相同的函数,这一对函数就构成覆盖关系
  3. 通过父类的变量调用存在覆盖关系的函数时,会调用变量当时所管理的对象所属的类的函数,即根据这个变量的动态类型来调用这个对象所属的函数(例: 对象是cat,就调用 cat 的run函数,对象是 dog,就调用dog的run函数)

封装

  1. 什么是封装?
    封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
    要访问该类的代码和数据,必须通过严格的接口控制。
    封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
    适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
  2. 封装的优点
    · 良好的封装能够减少耦合。
    · 类内部的结构可以自由修改。
    · 可以对成员变量进行更精确的控制。
    · 隐藏信息,实现细节。
  3. 封装的目的
  • 消除代码复制
    代码复制是不良设计的一种表现
  • 增加可扩展性
    可以运行的代码 != 良好的代码
  • 用封装来降低耦合
    类和类之间的关系称作耦合
    耦合越低越好,保持距离是形成良好代码的关键
  • 用接口来实现聚合
    个人感觉,封装其实就是实现了设计原则中的开闭原则。
    框架其实就是封装的体现。

后记:
关于Java基础的知识还有很多,下一篇要复习总结的是Java的注解与反射,注解和反射是构成许多框架的基础,对框架的原理理解学习至关重要。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值