封装:隐藏,封装数据实体
要求:
1. 属性是私有的(在其他类中不可见)
2. 提供一套get/set的公用方法
3. 根据需要可以在方法中添加其他逻辑
Java中的特殊函数:
1. 构造函数:用于创建对象,和初始化对象数据
特点:
1) 函数名必须和类名一致
2) 构造函数没有返回值,连void都不能有
3) 构造函数可以有0个或多个,多个构造函数参数列表必须不同
4) 构造函数必须跟着new关键字一起使用
new 关键字在计算机中用于开辟空间
public Users(){} :默认构造函数,如果在,类中没有显式的定义任何构造函数,那么计算机会在创建对象时,隐式的添加默认构造函数,但是如果类中显式的定义了构造函数,那么计算机就不会隐式创建默认构造函数。
建议:一般的实体类至少有2个构造函数(默认和全体初始化)
2.toString 函数:用于在输出对象时的数据字符串格式
在程序中打印输出对象时,计算机会隐式的去调用对象的toString方法
2. 静态函数:使用static修饰的函数,可以直接使用类名调用(放在静态域里面,普通函数放在堆栈里面的)
语法:类名.函数名();
静态函数一般放在工具类
单例模式:让一个类只能创建一个对象
设计模式:设计经验,是一套固定的设计代码经验
步骤:
1)让构造函数私有
2)提供static 修饰的函数返回一个对象
固定模式:
public class OOTest {
private OOTest(){}
//饿模式
private static OOTest oo= new OOTest();
publicstatic OOTest getOO(){
returnoo;
}
//懒模式
private static OOTest oo = null;
public static OOTest getOO(){
if(oo == null){
oo = new OOTest();
}
returnoo;
}
}
Exception in thread "main" java.lang.NullPointerException
atcom.mantou.test_2016_11_22.Work.check(Work.java:70)
atcom.mantou.test_2016_11_22.Work.login(Work.java:30)
atcom.mantou.test_2016_11_22.Work.map(Work.java:17)
atcom.mantou.test_2016_11_22.Test_main.main(Test_main.java:7)
以上报错,表示空指针异常,
面向对象-----继承,提高代码的重用性
父类(基类) 子类(派生类)
子类通过extends关键字继承父类所有非私有的属性和方法
语法:
Public class 类名 extends 类名{
}
Java只允许单个继承
重载: (所有类中都可以使用)
相同方法名不同参数列表的方法。 (重载只和参数列表有关系和返回值没有关系)Eg:构造函数
重写(也称覆写):(必须存在继承关系,而且只能在子类中重写父类的函数)
相同方法(返回值类型,参数列表,方法名都相同)不同实现(方法体)
所有的类都默认隐式继承Object类
如果子类重写父类函数,那么在调用时计算机会先在子类查找,如果存在就直接使用子类函数,如果不存在就使用父类函数。
建议:在子类重写父类函数的时候,建议使用Override 注解验证。
this表示当前类对象,super表示对父类的引用
抽象类:有抽象方法类一定是抽象类,但是抽象类不一定有抽象方法
继承抽象类的子类必须重新父类的所有抽象方法
使用Abstract 修饰的类:
Public abstract class 类名{}
抽象方法:
修饰符abstract 返回值类型 函数名(参数列表){}
接口:特殊的抽象类,在1.7以前的接口中的属性和函数都是抽象的
接口中的属性必须定义为 public static final 数据类型 变量名 = 值 ;
属性名必须全部大写!
final 用于修饰常量,常量只能初始赋值一次,其他地方不能重新赋值
定义接口语法:
Public interface 接口名{}
接口中的函数默认就是 abstract 的,可以省略不写
Java是单继承的,但是可以实现多个接口
实现接口的语法:(可以不用继承父类,直接实现接口)
public class 子类名 extends 父类名 implements 接口1,接口2…{}
使用建议:先定义接口(规则),多个接口的公用部分使用抽象类
继承中构造函数执行顺序:没有父亲那来儿子,
创建子类对象时,java会隐式执行父类的构造函数
super():表示调用父类构造函数,在子类中计算机默认调用父类无参构造函数
多态:相同方法不同实现(重写的具体使用)
Java 中体现了多态性:重写
实现多态的思想:父类的引用指向子类的实例,接口引用指向接口实现类实例
eg: People peo = new Student();
没有继承,就没有多态
父类引用只能调用父类存在的函数,在运行时java或先去子类中查找是否存在重写的方法,如果存在就直接调用子类函数,如果不存在才调用父类函数
父类引用不能调用子类特有的函数,如果想要调用只能通过向下转型,让子类引用调用自己的函数,注意在强制转换类型前都必须进行类型判断
public void job(People peo) {
peo.show();
if(peo instanceof Student){
((Student)peo).play();
}else if (peo instanceof Teacher){
((Teacher)peo).play();
}
}
判断语法:
(); 实例 instanceof 类型 :判断实例指向的数据类型是否属于指导类型
向上转换是自动转 :People peo = new Student();
向下转型必须强制转换 : Student stu = (Student)peo
Student stu = new Student();
在堆中开辟空间生成Student对象,内存自动生成一个标识地址,将地址赋值给栈中的stu变量
”==”是比较栈中的值相等
Equals 比较的是堆得值相等
面向对象编程是Java里面的大头, 封装,继承,多态等对面向对象编程起到了很大的帮助。 封装简单的说就是讲属性元素通过get 和set方法封装起来,只能通过get,set方法调用,这样增加了代码的安全性。 其中还有单例模式, 也就是让一个类只能创建一个对象,这种模式有效地增强了代码的安全性。
然后就是继承,java里面只能实现 单继承。 java里面可以实现多接口。 说白了,继承可以有效地减少代码重用性!! 继承里面还包括抽象类的继承,重写等知识点。
然后就是多态了,简单的说,没有继承就没有多态。多态是实现重写的一种。