面向对象:
面向对象是相对面向过程而言的。
以对象为导向围绕对象来分析、设计和编码实现应用程序的软件开发的一种方法,维护性好、扩展性好、重用性好、开发效率高。
现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例。
面向对象的编程是以对象为中心,以消息为驱动,所以程序=对象+消息。
面向对象的封装特性:
可以隐藏实现细节,使得代码模块化。是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。
1、良好的封装能够减少耦合。
2、类内部的结构可以自由修改。
3、可以对成员进行更精确的控制。
4、隐藏信息,实现细节。
Static 关键字:
public static void main(String[] args) {
//public 访问修饰符 权限
//static 静态的
//void 返回值为空
//main 作为入口
}
Static关键字(public static void main(String[] args){ })
-
// 静态成员(属性,方法)和非静态成员的区别
-
// 静态成员前有static关键字
-
// 静态成员,在新建第一个实例化对象的时候,会给静态成员变量单独分配一个内存空间,
-
// 后面实例化的对象就会共用这个空间。 调用方式: 类名.方法(属性)/对象.方法(属性)
-
// 无论实例化多少对象,共用同一块空间,都会分配相应的内存空间
-
// 非静态成员,每实例化一个对象的时候都会分配相应的内存空间
-
// 实例化一个对象,就会有一个新的内存空间,随着实例化对象销毁而销毁
-
// Class前不能加static,不能有静态的类
-
// 静态方法里也不能用this(当前对象还没有实例化)
-
静态方法不可以访问非静态的成员(属性,方法)。
类的静态成员属于类本身,在类加载的时候就会分配内存
非静态成员属于类的对象,所以只有在创建类的实例时才会分配内存,然后通过类的对象实例去访问。
在类的非静态成员不存在的时候静态成员就已经存在了,就相当于还没有这个类相当于我们去访问一个内存空间不存在的成员。
public class A {
{
System.out.println("A1");
}//普通代码块
static {
System.out.println("A2");
}//静态代码块
public A(){
System.out.println("A3");
}//构造代码块
//静态代码块>普通代码块>构造代码块
}
//如果有继承关系,先走父类静态代码块再是子类静态代码块
//然后先父类再子类,先普通再构造。
//静态代码块只会执行一次。
//优先顺序:
//父类静态代码块
//子类静态代码块
//父类普通代码块
//父类构造代码块
//子类普通代码块
//子类构造代码块
权限访问修饰符
(public、private、protect、default)
- a)public:
Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。 - b)private:
Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。 - c)protect: 介于public 和 private
之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中不可以访问。 - d)default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。
**
方法的重载和方法的重写
**
// 多态:[编译时多态/运行时多态]
// 【父类引用指向子类对象】
- //1)方法的重载(overload)————编译时多态
// 必须再同一个类里
// 可以方法名一样,参数列表(参数顺序参数个数)不一样,返回类型可以不一样
//
// 会根据传入的参数选择相应的方法 - //2) 方法的重写(override)————运行时多态
// 子类继承父类方法重写 方法名必须一样,参数列表一样,范围类型一样
@Override
public String laugh() {
return "小动物笑起来是可爱的";
//重写是反应多态的一种方式
//super.laugh();
//super(父类的意思)
//重写限制还是比较大的。
//子类如果重写了调用的方法就是重写的这个方法。
}
运行时多态
- 向上转型(把子类对象直接赋给父类引用叫(upcasting)向上转型,向上转型不用强制转换)
- 向下转型(把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转换)
- 父类引用指向子类对象,而子类引用不能指向父类对象。
- 向上转型时 b会遗失除与父类对象共有的其他方法;可以用向下转型在重新转回,这个和向上转型的作用要结合理解。