面向对象三大特征

1. 面向对象的三大特征

封装,继承,多态

1.1 封装

1.1.1 符合JavaBean规范的类封装过程

代码规范非常重要
后期可以有效的提供我们的开发效率!!!

在Java中定义符合JavaBean规范的类有什么要求
    1. 所有的成员变量全部私有化 ==> private
    2. 必须提供一个无参数构造方法
    3. 要求使用private修饰的成员变量提供对应的操作方法 ==> Setter Getter

1.1.2 private关键字

private关键字是一个权限修饰符
private修饰的成员变量,成员方法,【构造方法】都是私有化内容,有且只能在类内使用,类外没有任何的操作权限!

1.1.3 Setter和Getter方法

private修饰的成员变量类外是没有任何操作权限,这里需要提供对应的操作方法,setter和getter方法

Setter方法格式:
    public void set成员变量名(对应成员变量的数据类型 成员变量的形式参数) {
	    this.成员变量名 = 成员变量的形式参数;
    }

例如:
    public void setName(String name) {
	    this.name = name;
	}

Getter方法格式:
	public 对应成员变量的数据类型 get成员变量名() {
		return 成员变量;
	}

	例如:
	public String getName() {
		return name;
	}

如果成员变量是一个boolean类型,Getter方法有所不同
	boolean married;
	格式:
		public boolean isMarried() {
			return married;
		}

1.2 继承

1.2.1 Java中实现继承的方式

继承使用的关键字
extends
格式:
	class A extends B {

	}
	A类是B类的一个子类
	B类是A类的唯一父类
	Java中的继承是一个单继承模式

基本要求:
	1. 子类继承父类之后,可以使用父类的非私有化成员变量和成员方法【非私有化成员】
	2. 子类不能继承得到父类的私有化内容。

1.2.2 继承带来的问题

子类可以通过继承获取到父类中非私有化方法,但是父类的方法,不一定满足子类的情况。
这里不可能通过重新定义类似的方法名,完成子类特定的符合要求的方法。

1.2.2 方法的重写

解决的问题就是在开发中,父类的方法不适用于子类情况,子类可以重写父类的方法,完成自定义的方法使用
重写之后,在没有增加新的方法名的情况下,重写方法体内容,让方法满足子类,降低了开发压力,提高了效率。

@Override
	严格格式检查
	要求重写方法的和父类中的方法,声明完成一致,返回值类型,方法名和形式参数列表

1.2.3 重写和继承带来的问题

	子类继承父类可以直接使用父类的方法,但是在这种情况下我们可以发现父类的方法是一定不能在子类中使用的,但是又没有一个强制要求。                      
                                
需求:                             
		强制要求子类重写父类的方法,从语法角度约束      

1.2.4 abstract关键字

abstract修饰的方法
	要求子类强制重写!!!
	
让Eclipse帮着我们写代码
第一个错误:             
	Abstract methods do not specify a body                            
	abstract修饰的方法是没有方法体                                      
快速修复提示:   
	Remove method body
	删除方法体    
第二个错误: 
	The abstract method Q in type LOLHero can only be defined by an abstract class 
	在LOLHero中使用abstract修饰的方法Q,只能定义在abstract修饰的类内       快速修复提示: 
	Make Type 'LOLHero' abstract 
第三个错误:
	The type Yasuo must implement the inherited abstract method LOLHero.Q()        
	子类亚索类必须实现继承而来的abstract方法 LOLHero.Q()                 快速修复提示: 
	Add unimplemented methods
	添加没有实现的父类中abstract方法                                     
	
abstract使用总结:
	1. abstract修饰的方法没有方法体
	2. abstract修饰的方法必须定义在abstract修饰的类内或者interface接口内
	3. 一个普通类【非abstract】修饰的类,继承了一个abstract类,那么必须实现在abstract类内的所有abstract,强制要求
	4. 如果一个abstract A类继承另一个abstract B类,A类可以选择实现B类中abstract方法。
	5. abstract修饰的类内允许普通方法
	6. abstract修饰的类不能创建自己的类对象!!!
	【原因】
		abstract修饰的类内有可能存在abstract修饰的方法,而abstract修饰的方
		法是么有方法体的,如果说创建了abstract修饰类对应的对象,不能执行没
		有方法体的abstract方法
	7. 一个类内没有abstract修饰的方法,那么这个类定义成abstract类有意义吗?
	没有必要的!!!无意义的!!!

1.2.5. final关键字

最后的,最终的

final修饰的成员变量
	final修饰的成员变量定义时必须初始化,并且赋值之后无法修改,一般用于类内带有名字的常量使用
final修饰的成员方法
	final修饰的成员变量不能被子类重写,为最终方法,可以用于一些安全性方法的定义
final修饰的局部变量
	final修饰的局部变量一旦被赋值,不能修改!
final修饰的类
	final修饰的类没有子类,不能被继承。
	abstract修饰的类不能被final修饰。

1.2.6 static关键字【重点】

 静态成员变量使用注意事项

 	1. 静态成员变量是使用static修饰的成员变量,定义在内存的【数据区】
 	2. 静态成员变量不推荐使用类对象调用,会提示警告
			The static field SingleDog.info should be accessed in a static way
			使用static修饰的SingleDog类内的info成员变量,应该通过静态方式访问
   	3. 静态成员变量使用类名调用是没有任何的问题。【墙裂推荐方式】
	4. 在代码中没有创建对象时,可以通过类名直接使用静态成员变量,和【对象无关】
  	5. 代码中对象已经被JVM的GC销毁时,依然可以通过类名调用静态成员变量,和【对象无关】
 	6. 不管通过哪一种方式调用静态成员变量,修改对应的静态成员变量数据,所有使用到当前静态成员变量的位置,都会受到影响。

 为什么静态成员变量和对象无关

	1. 从内存角度出发分析
		静态成员变量是保存在内存的数据区
		类对象占用的实际内存空间是在内存的堆区
		这两个区域是完全不同的,所有可以说静态成员变量和对象没有关系 【没有对象】

	 2. 从静态成员变量以及类对象生命周期来分析
		静态成员变量是随着类文件(.class) 字节码文件的加载过程中,直接定义在内存的数据区。静态成员变量从程序运行开始就已经存在。
	类对象是在代码的运行过程中,有可能被创建的。程序的运行过中,有可能会被JVM的CG垃圾回收机制销毁,程序在退出之前一定会销毁掉当前Java程序使用到的所有内存。
		静态成员变量在程序退出之后,才会销毁
	
		静态成员变量的生命周期是从程序开始,到程序结束
		类对象只是从创建开始,而且随时有可能被JVM的GC销毁
		生命周期不在同一个时间线上,所以静态成员变量和类对象无关,【没有对象】

 static修饰成员方法

格式
 异常熟悉的格式
		public static 返回值类型 方法名(形式参数列表) {
	
		}

静态成员方法注意事项

 	 1. 静态成员方法推荐使用静态方式调用,通过类名调用【墙裂推荐的】
		不推荐使用类对象调用,因为【没有对象】
	 2. 静态成员方法中不能使用非静态成员 ==> (非静态成员方法和非静态成员变量)	
		因为【没有对象】
	 3. 静态成员方法中不能使用this关键字
		因为【没有对象】
	 4. 静态成员方法中可以使用类内的其他静态成员【难兄难弟】
	 5. 静态成员方法中可以通过new 构造方法创建对象
	
 静态成员方法特征解释

	 1. 静态成员方法加载时间问题
		静态成员方法是随着.class字节码文件的加载而直接定义在内存的【方法区】,而且此时的静态成员方法已经可以直接运行。可以通过类名直接调用,而此时没有对象存在。【没有对象】
	
	 2. 为什么静态成员方法不能使用非静态成员
		非静态成员变量和非静态成员方法时需要类对象调用的,在静态成员方法中,是可以通过类名直接执行的,而此时是【没有对象】的。

	 3. 为什么静态成员方法不能使用this关键字
this关键字表示的是调用当前方法的类对象,但是静态成员方法可以通过类名调用,this不能代表类名,同时也是【没有对象】

	 4. 静态成员方法可以使用其他静态成员
		生命周期一致,调用方式一致  

1.3 多态

多态
	父类的引用指向子类的对象
	或者说接口的引用指向遵从接口的类对象
	这就是多态

作用:
	1. 拓宽方法的参数范围
		例如:
			方法参数为Animal类型
			可以传入Animal类型本身,或者去子类对象都可以
			方法参数为USB接口类型
			只要是直接或者间接遵从USB接口的类对象可以作为方法的参数传入
	2. 拓宽方法的返回值范围
	3. 简化代码开发,提高开发效率,整合数据类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值