java面向对象

面向对象
类 对现实中事物的描述,将一类事物的静态属性和动态属性组合在一起
对象 事物存在的实体 类的具体实现个体是对象,对象是具体实在的事物
封装
封装时面向对象变成的核心思想,将对象的属性和行为(方法)封装,类作为封装对象属性和行为的载体向用户隐藏内部的实现细节。将同一类事物的共性归到同一类当中。利用抽象数据类型将数据和对数据的操作封装起来;数据要尽可能的隐藏在抽象数据内部,只保留一些接口用来和外部进行交流;用户无需知道内部的数据方法的具体实现细节,只需操作外部暴露的接口。
继承
继承是从已有的类中派生出新的类,新的类有父类的数据属性和行为,并能扩展新的行为和属性;使类之间产生了联系;java继承关系是传递的;java只支持单继承,不支持多继承;java以另一种型是实现多继承(实现多个接口)
Object是所有类的父类
子类和父类中变量同名,在子类中访问子类中的变量this.,在子类中访问父类中的变量super.
子类和父类中函数同名,子类函数会覆盖父类函数,Override,重写父类功能内容;子类要重写父类方法必须保证子类权限大于父类(public>protected>默认权限>private),静态方法只能覆盖静态方法;子类不能重写父类的构造方法,父类比子类先加载,在子类所有构造方法之前都默认会调用父类的无参构造器(super());父类中如果有无参构造器,子类中构造函数可以不用写super(),父类中如果没有无参构造器,则子类中每个构造函数都要在第一句显式的调用父类的有参构造器super(参数)。(如果没有构造器,系统会默认生成一个无参构造器;如果有构造器,系统不会生成无参构造器)
多态
多态分为两种,编译时多态和运行时多态,编译时多态是静止的,指的是方法的重载,它是根据参数列表的不同来区分不同的函数;运行时多态是动态的,程序中定义的引用变量指向的具体类型和通过该引用变来嗯发出的方法调用在编程时不确定,而是在程序运行期间才能确定。
向上转型
Cat类继承于Animal类 Animal a=new Cat();//父类引用指向子类对象
这样可以使用子类的功能,也可以使用父类中的方法和属性;子类如果重写了父类某个方法,则父类引用不能调用父类被重写的方法,只能调用子类重写父类的方法。
通过父类的引用只能访问子类对象从父类继承过来的成员,不能访问子类对象所特有的成员;父类引用永远不可能直接赋给子类引用,只有在父类引用本身指向的就是子类对象的时候,才可以将父类引用强制转化为子类的引用(其他情况下不能将父类的引用强制转化为子类的引用,否则运行时会出错)
成员变量和局部变量
成员变量(类的属性) 定义在类中,作用于整个类中;存在于堆内存对象中;随着对象创建而创建,消失而消失;有默认的初始化值;
局部变量 定义在函数语句,局部代码快中;只对所属区域有效;存在于栈内存中随着所属区域的执行而存在,结束而释放;无默认初始化值,因此必须初始化,否则不能运行;
当成员变量和局部变量名称一致时,默认使用局部变量
构造函数
函数名与类名一致,不能用return;构造函数不能互相调用,会形成死循环;对象一建立就会调用构造函数,可以用于对特定对象进行初始化;如果类中没有构造函数,系统会默认添加一个空参构造器;构造函数可以私有化,私有化之后不能创建对象;
构造代码块
给所有对象的共性进行初始化,对象一建立就运行,优先于构造函数,可多次运行;{}
this
代表当前调用对象;区分同名成员,局部变量((成员)this.变量名(局部)变量名);当本类内部需要使用本类对象时,用this来表示;也可以用来构造函数调用其他构造函数,写在构造函数第一行;
static
静态关键字,修饰成员(包括变量和方法),表示共性数据;可以直接被类名调用(类名.静态成员);被所有对象共享,只占用一块内存(方法区,共享区,数据区);随着类的加载而加载,随着类的消失而消失,生命周期最长;静态成员和成员变量:静态成员随着类的加载存在于方法区中,成员变量随着对象的建立存在于堆内存中,静态成员随着类的消失而消失,成员变量随着对象的消失而消失;静态方法只能访问静态成员,静态方法中不能呢个定义this,super关键字(静态成员比对象的生命周期长);静态方法不能调用成员变量(生命周期不同);
静态代码块
随着类的加载而执行,只执行一次,优先于主函数,用于给类初始化(代码执行顺序:静态代码块,主函数,构造代码块,构造函数)
一个对象的建立过程:
局部代码块
在方法中,限定局部变量的生命周期
Person p= new Person();
1.找到Person.class文件并加载到内存中,并且会加载Person的父类(如果有直接父类)
2.执行static代码块
3.在堆内存中开辟空间,分配内存地址(main函数开始)
4.在堆内存中建立对象的特有属性,并进行默认初始化
5.对对象进行构造代码块初始化
6.对对象进行对应的构造函数初始化(在构造函数中第一行会先调用父类构造函数进行初始化,父类初始化完毕后,再对子类进行显示初始化)
7.将内存地址赋值给栈内存中的p变量
final
继承的弊端,打破了封装性;final修饰的类不能被继承,final修饰的方法不能被覆盖,final修饰的变量是一个常量,只能赋值一次
抽象类和抽象方法
抽象方法必须在抽象类中,不能用该类创建对象,没有意义,因为抽象方法没有方法体,只有方法声明,要使用抽象方法,要有子类重写该方法;抽象类的子类如果没有重写所有的抽象方法,则子类也是一个抽象类(只要有抽象方法,就是抽象类)
接口
interface,不能创建对象;所有变量都是 public static final,所有的方法都是 public abstract;接口可以被类多实现,类在继承一个父类的同时可以实现多个接口,接口之间可以继承,一个接口可以继承多个接口;
接口于抽象类的区别
接口可以近似的当作一个抽象类,但是却不是抽象类,接口被类实现,抽象类被类继承;接口中方法不能有方法体,抽象类中方法可以有方法体;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章