面向对象学习笔记二 一、面向对象中的类及其成员的修饰符和作用 权限修饰符:private 、默认(什么都不写)、protected 、public(权限从小到大) 状态修饰符:static final 抽象修饰符:abstract 类: 权限修饰符:默认和public两种,常用的是 public,作用对外提供访问权限。 状态修饰符:final,表示该类是最终类不能被其他类继承,但可以创建对象。 注意:在java的JDK中被final修饰的类不能被继承!!! 抽象修饰符:abstract,表示该类是抽象类,不能直接创建对象,只能被继承,通 过子类或多态的方式来创建对象。抽象类可以不包含抽象方法,但包含抽象方 法的类一定是抽象类。 成员变量: 权限修饰符:private 、默认 、protected 、public,最常用的是 private,用于封 装成员变量,保护数据的安全,且该变量只在本类中才能访问。 状态修饰符:static、final。被static修饰的成员变量也叫类变量可以由类名.变量 名的方式直接访问,此时该变量被这个类的全体对象所共享;被final修饰的 变量,其值不可以被改变。二者可以同时使用。 构造方法: 权限修饰符:private、默认、protected 、public,最常用的是 public,当构造方法 被private修饰时表示该构造方法不能用来new出对象。 成员方法: 权限修饰符:private、默认、protected、public,最常用的是 public,对外提供访 问权限。被private修饰的成员方法只在本类中才能访问。 状态修饰符:static、final,被static修饰的成员变量也叫类变量可以由类名.方法 名的方式直接访问;被final修饰的方法不能被子类重写,二者可以同时使用。 抽象修饰符:abstract,被abstract修饰的成员方法称为抽象方法,该方法只有声 明没有方法体,只能被子类重写。 注意:抽象修饰符abstract不能和private、final、static一起使用。 二、成员变量和局部变量的区别 在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 在内存中的位置不同 成员变量:在堆内存分配存储空间 局部变量:在栈内存分配存储空间 生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 初始化值不同 成员变量:有默认初始化值。 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。 注意:定义变量的时候,尽可能将这个变量的使用范围最小化,能定义成局部变量,就 不定义成成员变量 三、静态变量和成员变量的区别 所属不同: 静态变量属于类,所以也称为为类变量 成员变量属于对象,所以也称为实例变量(对象变量) 内存中位置不同: 静态变量存储于内存中的data数据区。 成员变量存储于堆内存 内存出现时间不同: 静态变量随着类的加载而加载,随着类的消失而消失 成员变量随着对象的创建而存在,随着对象的消失而消失 调用不同: 静态变量可以通过类名调用,也可以通过对象调用 成员变量只能通过对象名调用 四、静态的作用,特点?为什么静态不能访问非静态? static关键字可以修饰成员变量和成员方法,方便我们使用,无需创建对象,直接用类 名.静态方法名/变量名即可调用,节约堆区的开销。 static关键字特点: 静态所修饰的成员,随着类的加载而加载,优先于对象存在,会被该类的所有对象 共享。 static关键字注意事项: 在静态方法中是没有this关键字,静态方法只能访问静态的成员变量和静态的成员 方法,简而言之静态只能访问静态。 五、静态代码块和构造代码块的区别,静态代码块、构造代码块、构造方法的执行顺序 静态代码块:只执行一次,以后创建再创建多少个对象,都不会执行; 构造代码块:每创建一个对象,就会执行一次; 执行顺序:先执行所有的静态代码块,再执行所有的构造代码块,最后执行构造方法。 六、this和super的区别 this代表本类对应的引用,用来解决成员变量与局部变量重名问题。 this关键字代表所在类的对象引用,方法被哪个对象调用,this就代表那个对象。 Super:代表父类引用。 Java里的子类用super调用父类构造函数时,调用的函数必须放在子类的第一条语句的位置。可以在子类中用super关键字调用父类中非私有的成员变量和成员方法。 七、重写和重载的区别? 重写Override:指子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖, 方法复写,与返回值类型无关。 注意:父类中私有方法不能被重写,子类重写父类方法时,访问权限不能更低。 如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。 重载Overload:表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各 不相同(即参数个数或类型不同)。 八、抽象类和接口的区别 抽象类:abstract修饰的类即为抽象类,抽象类不能创建实例对象。含有abstract方法的类必须定义为抽象类,抽象类中可以没有抽象方法。抽象类中定义抽象方法必须在具体子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。 接口:可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。 两者的语法区别 1. 抽象类可以有构造方法,接口中不能有构造方法。 2. 抽象类中可以有普通成员变量,接口中没有普通成员变量 3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。 4. 抽象类中的抽象方法的访问类型可以使public、protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认修饰即为public abstract类型。 5. 抽象类中可以包含静态方法,接口中不能包含静态方法 6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。 7. 一个类可以实现多个接口,但只能继承一个抽象类。
字数有限,具体请参照附件pdf,谢谢。 本文总结与java基础班课堂笔记和毕老师的视频,如有描述不清或错误的地方,还请大家指出,以便大家共同学习,共同进步,谢谢!
|