面向对象特点

面向对象:
三大特征:封装 继承 多态
封装:把一类事物的特征抽象为变量,把事物的行为抽象为方法,加以访问控制属性的限制称为封装
封装的意义: 保护
抽象
[访问控制属性]class 类名{
//属性
修饰词 属性类型 属性名;
方法
修饰词 返回值类型 方法名(参数列表)[异常声明]{
方法体
}
构造方法:(实例化对象、构造对象时会根据参数来调用构造方法)
1.没有返回值类型 也不能是void
2.方法名和类型相同
3.子类构造的构造方法: 默认调用父类无参的构造方法 super();
4.显示调用父类中的构造方法 super(参数);–只能在第一行
}
java语法规定:
一个 .java文件中只能有一个public的类,而且这个类和文件名相同

访问控制属性:
	public               在任何地方都可能通过对象访问该类的属性或者方法
	protected            只能在本类或者子类中访问  本包中也可以访问
	默认[default]        在本包中可以访问
	private              只能在本类中访问


类类型  引用变量  = new 类型名(参数列表);
		左边是声明了引用变量    右边是实例化对象(在堆内存中分配内存)
		
局部变量:
	1.定义在方法中
	2.不会自动初始化(不初始化不能使用)
	3.生命周期: 方法调用到方法结束
	4.存储位置: 栈内存
成员变量(属性):
	1.定义在类里面,方法外
	2.对象实例化之后,自动初始化
		byte int short long       0
		boolean                   false
		char                      '\u0000'
		引用数据类型              null
	3.生命周期: 对象实例化之后,对象回收之前
	4.存储位置: 堆内存

对象:当一个对象没有引用变量再引用时,该对象将无法再访问
	JVM有一个独立的线程,当对象没有引用变量引用时,将回收该对象的内存
	java的内存回收机制   垃圾回收机制
	

成员方法里面(构造方法):有一个隐含的this引用变量
	this引用正在构造的对象或者调用该方法的对象

static:
	1.static修饰属性(不能修饰局部变量):表示类属性 属于类,不属于对象
		该类所有的对象都共享一份
		可以直接通过  类名.属性名 直接进行访问
		也可以通过对象进行访问
	2.static修饰方法:表示(静态方法)类方法 属于类 不属于对象 
		静态方法中没有this引用变量
		静态方法中不可以访问成员变量和调用成员方法
		只能访问类属性和调用类方法
	3.static修饰语句块
		静态语句块
		在类加载时执行,只会执行一次
		加载图片、视频等资源
		普通的语句块:在实例化对象时被调用 在构造方法之前先执行

final:
	1.修饰变量或者属性  表示该变量和属性不能修改
	2.final修饰属性 只能直接初始化 或者 在语句块、或者构造方法中初始化
		只能选择其中之一
	3.final修饰方法 表示该方法不能被子类重写
	4.final修饰类   表示该类不能被继承
	5.final和static同时修饰的属性 称为常量
		只能直接初始化 或者 在静态语句块中进行初始化

练习:
封装一个学生类
属性:学号、姓名、年龄
学号自动生成(构造学生时不需要传递学号)
class Stu{
static int makeId;
int id;
Stu(…){
id = makeId++;
}
}
再封闭一个班级类
班级号
班级名称
学生数组

	1.在班级中增加一个学生
	2.按指定学号删除班级中的一个学生
	3.显示班级中所有的学生信息

//
class Stu{

}

包 package
	zhizhen.core.src.day01
		包里面的.其实代表的是目录的层级关系
		
如何表示一个唯一的类:
	包.类名 
	
	导包: import 包名.*;
		   import 包名.类名;
		   Ctrl+Shift+o
	package 包名;
	
继承:另一个类继承另外一个类,那么这个类称为子类或者派生类
	被继承的类称为父类或者基类
	子类拥有父类的属性和方法
	
	子类的构造方法:
		默认调用父类的无参构造方法
		super(参数);
		this(参数);

	重写:
		子类重写父类中同名的方法
		1.子类重写父类的方法
		2.方法名相同
		3.参数列表相同
		3.返回值类型:
			基本数据类型必须一致
			如果是引用数据类型 子类可以返回父类方法返回值类型的子类类型
		4.子类重写的方法的访问控制属性不能比父类方法的访问属性更窄
		public>protected>[default]>private
		
	子类类型对象,可以用父类类型的引用变量引用
	但是通过父类类型的引用变量只能访问父类中声明的属性和方法
	
	如果子类重写父类中的方法,那么用父类类型的引用变量引用子类类型对象时,调用的是子类自己的方法,这个现象称为多态

	子类重写父类中的方法时,可以用 super.方法名(参数)  来调用父类中的方法
	
	
	重载:
		同一个作用域下,方法名相名,参数不相同即构成重载

	子类的属性名可以和父类中的属性名相同,
		为了以示区别:
			在访问父类中声明的属性时加上   this.
多态:
	父类类型的引用变量引用子类对象时,调用的是子类重写的方法

抽象方法:
	abstract修饰的方法称为抽象方法
		抽象方法没有方法体 
		
一个拥有抽象方法的类必须声明为抽象类(abstract修饰的类称为抽象类)
	抽象类是不完整的类,所以不能实例化对象
	
抽象类可以有属性和普通的成员方法 构造方法都可以有

	抽象类的意义:
		1.提供一个公共的类型
		2.封装子类共同拥有的属性和方法
		3.为子类提供统一的接口

一个继承一个抽象类,必须实现抽象类里面所有的抽象方法,否则该类只能声明抽象类


接口: 更加彻底抽象的类  接口也是一种类型
interface  
	接口中只能有常量和抽象方法
	定义的属性默认是 final static
	定义的方法默认是 public abstract
接口可以继承接口
	interface I extends M{}
	
接口可以被类实现
	class X implements I{
		
	}

	为什么要接口?
	java中的继承是单一继承,即一个类只能有一个父类
	一个类可以实现多个接口

练习:
银行卡
卡号 密码 账号余额 int type 1:中国银行卡 2:招商银行卡
中国银行卡
招商银行卡
在线银行系统ATM
插卡
取卡
取钱
中国银行
1.拿中国银行的卡去中国银行取钱 不收手续费
拿其它行的卡来中国银行取钱 收取5% (从余额中直接扣除)
招商银行
1.拿招商银行的卡去招商银行取钱 收取每次1元的手续费
拿其它行的卡来招商银行取钱 2元/每次手续费

class Card{}
class ZGcard extends Card{}
class ZScard extends Card{}

class ATM{
Card c;
//insert
//push
//查询账户余额
//takemoney 抽象方法
}

class ZGATM extends ATM{}
class ZSATM extends ATM{}

instanceof  
	引用对象 instanceof 类型
	判断某个引用变量引用的对象是否是某种类型实例化的对象
	子类对象一定是父类类型的实例化

向上造型: 子类对象可以用父类类型的引用变量引用
向下造型:  一般来说需要结合instanceof
	子类 obj = (子类)(父类引用对象);
	如果该父类引用对象并不是 强转子类类型的对象 将发生以下异常
	java.lang.ClassCastException
	

抽象类与接口的区别:
	1.抽象类可以有普通的成员属性和方法
		接口里只能有常量和抽象方法
	2.抽象类可以有构造方法
		接口没有构造方法
	3.一个类只能继承一个抽象类,但是可以实现多个接口
		extends    implements
	

内部类:
	1.成员内部类
	2.静态内部类
	3.局部内部类
	4.匿名内部类 
		直接new 抽象类或者接口对象,但得同时实现抽象方法
		new 抽象类(){
			//实现抽象方法
		};
		new 接口(){
			//实现抽象方法
		};

定时器任务
鼠标监听事件

面向过程
面向对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值