面向对象有三大基本特征:封装,继承,多态.
封装很好理解,作为面向对象的基本特征之一,封装就是将客观事务抽象成类,并将这些方法属性只开放给自己信赖的对象,对不可信的对象隐藏.常用的修饰关键字有public protected default private.
public 修饰类,方法,属性,作用域是所有用户
protected 修饰类,方法,属性,作用域是同一个包下面的类和子类
default 修饰类,方法,属性,作用域是同一个包下面的类和子类
private 修饰的类或属性,作用域是当前类
继承作为面向对象的最主要的一个功能,主要是分为两个部分:抽象类继承和接口实现.
继承是一个类(子类)获取另一类(父类)的属性的方法,同时也是可以拥有自己的方法.其关键字extends.Java中继承只有单继承,是is-a的关系,子类继承父类的抽象方法,可以选择重写或者继续使用abstract修饰,子类在继承父类时,已经实现的方法可以直接使用,子类可以继承父类的属性,构造方法,但是需要用super,但是私有的属性和方法子类是不可以继承的.同时子类也可以定义自己的方法.
this 作用域当前对象,指向当前对象的引用,不可以和static(全局变量)联合使用,当成员变量与全局变量相同时,使用this,表明是成员变量被调用.
super 在子类中引用父类的方法时(构造方法,方法,变量),使用super
abstract 修饰类(抽象类)和方法(抽象方法),类不可以被实例化,同时抽象类中不一定有抽象方法,但是有抽象方法一定是抽象类.父类是抽象类的子类,要么重写抽象方法,要么把自己定义为抽象类
static 修饰的属性和方法都是全局的,属于类
final final修饰的类是不可以被继承的,修饰的方法子类不可以重写,修饰的变量是不可以改变的
父类子类的加载顺序:父类的静态代码块静态变量和静态代码块,子类的静态变量和静态代码块,父类的代码块,成员变量和构造方法,子类的代码块,成员变量和构造方法.(需要代码的可以在下面留言)
接口实现 接口中的方法都是由public和abstract修饰的,属性是public,static,final修饰,定义一个接口关键字interface,接口是has-a的关系,可以多
实现,关键字implements.
那么抽象类和接口有什么区别呢?
1.抽象类和接口定义的关键字不一样,抽象类是abstract修饰,接口由interface修饰
2.抽象类由子类继承,使用关键字extends,接口实现使用关键字implements
3.抽象类可以有构造函数,但是接口中没有
4.抽象类中可以有不同权限修饰的属性,方法,接口中的属性方法都必须用public abstract修饰
5.抽象类和子类的关系是单继承的,是is-a的关系,但是接口是支持多实现,多继承的,是has-a关系,抽象类中的抽象方法如果子类不重写的话需要把自己定义成抽象的,但是如果接口中的方法不能全部实现的话,也需要把自己定义成抽象类
6.抽象类中可以没有抽象方法,但是接口不可以
多态 子类以父类的形式出现,只有当调用方法的时候才知道子类对象的引用,提高了代码的扩展性,虽然创建了子类的实例但是不可以实现子类特有的性能,实现多态的条件是:继承&重写&父类引用子类对象,实现多态的方法是覆盖和重载.
覆盖 重新定义父类的方法,方法名,返回参数,入参,权限修饰符合抛出异常个数必须一致,但是final,private和static的方法不可以覆盖重载 发生在本类或父类子类中,可以通过定义参数类型,参数个数,参数顺序不同,但是不可以通过设置方法的权限,抛出异常个数,返回类型定义重载