什么是面向对象:
面向对象就是一种使用封装,继承,多态,抽象等思想进行软件的分析和开发的方法,而java就是一门面向对象的编程语言
1.封装:
java中的封装就是将属性私有化,然后提供一对公有的方法get和set,最后在set方法中对属性赋值进行合理的判断
注意:这里解释一下,get和set方法不是必须成对出现的,根据具体情况而定,但为了规范起见一般都是会成对出现的。如果需要设置值就提供set方法,如果需要访问值就提供get方法
private只是封装的一种表现,只要是对外不可见就可以达到封装的效果,封装的好处在于不让用户直接访问内部属性,提高了代码的安全性
带参方法:形参(形式参数),实参(实际参数) 被调用的方法中的参数称之为形式参数,调用方法给的值称之为实际参数
方法的重载:基于一个类中,方法名必须相同,参数列表不同(参数列表个数相同时,参数类型不同),与返回值和访问修饰符无关!!!!!!!
构造方法:构造方法的方法名必须和类名相同,没有返回值(连void也没有),如果程序没有现实写出构造方法,程序会默认提供构造方法。没有明确的返回值但可以使用return关键字
成员变量和局部变量:
成员变量:定义在类中方法外,可以不赋初始值,如果不赋初始值程序会默认赋初始值
局部变量:定义在方法中,没有默认初始值,如果不赋初始值调用该属性是会编译报错
2.继承:
所谓的继承就是将多个类中具有共性的属性和方法抽出单独的一个类中封装起来,然后将这些类与这个封装类发生关系就是继承
java的四个访问修饰符使用范围:
public :在同一项目下,任何地方都可以访问
private:只能在本类中可访问
protected:可以在本类,同包下的不同类,不同包下的父子类都可以被访问
默认修饰符:本类中,同包下的不同类中被访问
static修饰符:
被static修饰的属性和方法,都从属于类,可以通过类名直接访问,也称类属性和类方法
static修饰的属性在内存中存放在方法区中,独一份(只要修改static修饰的属性值,修改的都是同一个)
static修饰的属性,可以在本类中任意地方被访问,修饰的方法也是
static修饰的属性不能定义在普通方法中
static修饰的方法中不能使用this super关键字
static修饰的方法中不能调用普通方法和成员变量,需要通过实例对象才能调用main方法就是一个常用的静态方法
方法的重写:
基于父子类,方法名相同,参数列表相同,返回值相同或其子类,访问修饰符不能严于父类
继承下的构造方法:
首先声明下,子类继承父类构造方法是不能被子类重写的
如果子类继承了父类,那么子类构造器中默认会调用父类的构造方法而且必须在首行
如果子类继承父类,那么程序执行时顺序为,父类属性初始化——父类构造器——子类属性初始化——子类构造器
this和super的区别
this代表当前对象的引用
super代表当前对象的服父类的引用
两者都可以调用属性,普通方法,构造方法
this()和super()的特点:
this()调用当前对象的构造方法 必须在构造器中,而且必须在首行 super()和this()相同
3.多态:
继承是多态的前提,没有继承就没有多态,而且要子类重写父类的方法才能实现多态
多态的定义:父类引用指向子类对象
向上向下转型:
向上转型:Person p=new Child(); 父类引用指向子类对象 (小转大)称之为向上转型
向下转型:Child c=(Child) p ; 将父类转换成子类对象 (大专小)称之为向下转型,向下转型可以调用子类中独有的方法
多态的两种使用方式:
父类作为形参
父类作为返回值
4.抽象类和接口
抽象类的特点:抽象类不能被实例化,要用abstract修饰(因为抽象类的中的抽象方是要被子类重写的,在子类中实现具体方法,所以抽象类实例化没有任何意义)
抽线方法的特点:没有方法体(没有具体实现),用abstract修饰 子类必须重写抽象类的抽象方法除非子类也是抽象类
注意:一个类中如果定义了抽象方法,那么这个类必须定义为抽象类,否则编译报错。反之如果一个类定义为抽象类,那么类中的方法不是必须为抽象类
接口的特点:接口同样也不能被实例化,定义接口的关键字interface(具体实现都在实现类中)
接口中定义的属性必须为公开的静态常量 :public static final int NUM=10;
接口中定义的方法必须为公开的抽象方法 : public abstract void show();
如果实现类实现了某一个接口那么就必须实现接口中的全部方法,否则实现类是抽象类
JDK1.8的版本接口中可以有静态方法,但不能被实现类重写和覆盖,1.8版本后也可以后默认方法而且可以有多个
总结:其实抽象类就多了一个抽象方法,其他得特点都和普通类一模一样。比如抽象了也可以继承普通类,抽象类也可以有静态方法,静态常量