这部分是Java基础视频笔记的第二部分~
内容包括:封装、继承、多态、递归调用、引用传递、抽象类、接口等OOP的重要概念:
这部分的内容需要重点理解并牢记;

16、封装:对外部不可见
         继承:扩展类的功能
         多态:方法的重载、对象的多态性

 17、方法的递归调用:
     方法调用自己本身,常用于遍历文件夹、手机SD卡;
递增递减,回归本身

 18、封装性、构造方法、匿名对象:
封装的目的:保护某些属性和方法不被外部看见;
封装的实现:通过关键字private声明,进行属性和方法的封装
    创建该属性的set和get方法,作为外部访问的接口,set设置,get得到

匿名对象不用声明名字,直接实例化,程序中只使用一次的对象才可以使用匿名法;
new Person().tell();

构造方法:没有返回值类型,随着类的实例化自动执行,名称必须与类名一致;构造方法就是构造器;

访问修饰符 类名称{
    程序语句
}

构造方法是为类中的属性初始化;
每个类都会在实例化后调用构造方法,如果没有,就会在编译的时候创建一个无参的构造方法;
构造方法也可以重载

 19、引用传递、this、static关键字

引用传递:通过在方法中实例化类,重新给类的变量赋值this:
1、通过this表示本类中的属性;
         2、调用当前类中的方法;
         3、this();放在构造方法第一行,直接调用重载的无参构造方法的语句;
      4、比对当前对象是否是同一个对象static:
     1、static声明全局属性
     2、static方法,最好通过类名调用
     3、static方法只能访问static方法和属性,非static方法不能直接访问,

需要实例化类对象才可以通过 .调用;
只能访问静态方法和属性 20、继承:class c extends f
类名都要大写
extends 之后,子类可以从父类继承所有属性,并可以扩增自己的属性;

继承的限制:
1、Java中只允许单继承
2、子类可以继承父类的属性,但是不能在类中直接访问父类的私有属性;
  需要通过get和set方法,例如,在public void tell()等方法中用getAge()获取

 21、子类的实例化过程:先调用父类的构造方法,再调用子类的构造方法;
先有父,再有子;
长者先,幼者后;
子类也叫父类的派生类; 22、super关键字:
父类、子类的方法的重写; 
super.tell(); //当父类和子类出现重写的方法,需要使用super关键字调用父类的方法
      //super关键字 可以强行调用父类方法的执行;
    //构造方法在编译的时候,会默认调用super()方法来实现同样的效果;

访问权限:
private < default < public
1、private 在当前类中访问
2、default 在同一个包内访问
3、public  整个工程下都可以访问

子类的构造方法不能比父类有更严格的访问权限;


 23、重载与重写区别:

多态:重载、重写体现了方法的多态性

Overloading: Overriding:

重载:方法命名相同,参数类型、参数个数不同;   同一个方法,实现不同功能    
重写:方法命名相同、参数类型、返回值也全部相同;    用于子类继承父类的时,扩展父类方法功能  也叫覆盖

定义:
重载:对权限没有要求;
重写:被重写的方法,不能有比父类更加严格的权限;

范围:
重载:发生在一个类中
重写:发生在继承中


 24、OOP三大特性:继承(父类派生、子类扩展、重写)、多态(重载,方法同名不同参)、封装(private)

 25、抽象类和接口:OOP最重要的部分之一
final关键字:完结器
final声明的类不能被继承
final声明的方法不能被重写
final声明的变量变成常量、常量是不可以被修改的

final修饰的属性要用大写

 26、抽象类:包含一个抽象方法的类

     ·抽象方法:声明而未被实现的方法,抽象方法必须使用abstract关键字声明

     ·抽象类不能直接被实例化,要通过其子类进行实例化

     ·抽象类的子类,必须重写抽象类中的抽象方法

public abstract void say();

作用:对同一类事物的共有特征的一个抽象概括,子类可以对抽象类的功能进行扩展,设置自己的专有属性

比如水果是抽象类,苹果、香蕉、橘子是抽象类的具体子类,抽象类不能实例化,具体子类可以

 27、接口是Java中最重要的概念:

* 接口是一种特殊的类,全部由全局常量和公共的抽象方法所组成;  接口是招牌,告诉我们它对接的功能

格式:
interface InterfaceName{
    全局常量;
    抽象方法;
}

* 接口必须通过子类才能实例化,使用关键字implements实现,也必须重写接口中的抽象方法;

class A implements Inter1{//子类实现Inter接口

}

* 接口是可以多实现的
class A implements Inter1,Inter2{

}

* 一个类可以同时继承抽象类和接口
class A enxtends Abs implements Inter1,Inter2{

}

* 接口不能继承抽象类,但可以通过extends 同时继承多个接口,实现接口的多继承。