1.定义的位置不一样
局部变量定义在方法中,成员变量定义在方法外面,类的里面.
2.作用域不同
局部变量的作用域就是所定义的大括号,成员变量的作用域:在整个类中都可以使用,并且,成员变量的作用域跟变量修饰符有关,如果修饰符不是private,在其他的类中也可以使用
3.在内存中的位置不一样
局部变量存在于栈中,会随着作用域的结束而消失,成员变量存在堆中,是和对象的生命周期相同
4.初始化不同
局部变量在使用之前一定要手动进行初始化,而成员变量,如果没有进行手动初始化,java就会给他一个默认值,整数类型:0,long:0L,小数类型:0.0
静态方法会先于非静态的变量生成,所以静态方法不能使用非静态的成员变量
有类的时候不一定有对象,有对象的时候一定有类,所以非静态(方法)可以访问静态的(方法和变量),反之不行.
静态的属于类,非静态的属于对象
继承(泛化)
耦合性强
依赖
关系较弱,具有偶然性(人可能要过河,但不是每天都要)
在java中的体现
一个类是另一个类的方法的参数
关联
你和你的朋友,可以是单向也可以是双向
在java中的体现
一个类是另个一类的成员变量
聚合
是一种特殊的关联关系
在java中的体现
一个类是另个一类的成员变量
组合
在java中的体现
一个类是另个一类的成员变量
实现
依赖->(关联->聚合->组合)->继承
类和类之间的关系要越弱越好,高内聚低耦合.
重写也叫覆写,修饰符、返回类型、参数就是要和父类一摸一样才叫覆写,意思是说各个地方都需要完美的盖住,在面向接口编程中,重写是子类有自己的逻辑要实现,同时又不破坏已写好程序逻辑的好方法======================================================举个例子,在父类中是public的方法,如果子类中将其降低访问权限为private,那么子类中重写以后的方法对于外部对象就不可访问了,这个就破坏了继承的含义
我的理解:继承是为了让同一个函数,做不同的事情,是扩展函数的用法.若子类中访问修饰符的范围小于父类,就违背了这个思想.
java中会根据方法签名来调用方法.如果在当前类中找不到,则会沿着父类一级一级向上查找
重写是发生在父类子类之间,子类重写父类的方法,返回值一定和父类的返回值相同
方法的重载发生在同一个类中,方法名相同,参数列表不相同,返回值类型不作为判断的标准
构造方法代码块:
只有在创建对象之前调用一次
构造方法的执行顺序:和变量的声明的执行优先级相同
1创建对象空间
2给成员变量进行默认初始化
3显示赋值
静态代码块:第一次加载该类的.class文件时
局部代码块:写在方法中的代码块,为了限制,变量的作用范围
final关键字可以修饰类,方法和变量
用final修饰的类不能被继承,用final修饰的方法不能被重写(但是可以继承)
用final修饰的变量,当第一次赋值后,不能被改变,也就是常量,
Final修饰的成员变量一定要在构造方法执行之前赋值,
局部变量要在使用之前赋值,因为java不会给局部变量设置初始值
Final修饰的形参不能修改
多态:同一个变量调用同一个方法,执行代码可能不同
多态的好处:提高了程序的扩展性
开闭原则
对扩展开放,对修改关闭
对类的设计,我们面向的父类,调用的时候,传入的是子类
多态的前提:
必须有继承必须有重写父类引用指向子类对象多态的原理:在java中变量有两种类型,一个叫编译时类型,一个叫做运行时类型,
当一个变量的编译时类型和运行时类型不会相同时,就会产生多态
编译时类型是声明该变量的数据类型,运行时的类型是传入的对象的数据类型
如果一个方法没有方法体,则该方法是一个抽象方法,要用abstract关键字进行修饰,如果一个类中有抽象方法,则该类叫做抽象类,也要用abstract修饰
抽象类不能创建对象,抽象类就是用来给子类继承的
如果一个类继承的是有抽象方法的抽象类,则有两种情况
1:子类不重写父类的抽象方法,则子类也是一个抽象类
2:子类重写父类的抽象方法
抽象类中不一定有抽象方法,只要这个类用abstract修饰
接口中的方法全部是抽象方法,接口中不能有具体的方法(就是有方法体的方法)
在接口中方法的默认修饰符是 public abstract
在接口中没有变量只有常量,变量的默认修饰符是public static final
Java中只支持单继承,但是可以实现继承的传递
在Java中一个类可以实现多个接口
1:创建的关键字不同,接口用interface,抽象类用class
2:接口中全部为抽象方法,抽象类中可以有非抽象方法
3:抽象类中可以定义普通成员变量,接口中只能定义静态的常量
4:一个子类只能继承一个抽象类,一个子类可以实现多个接口
5:从语义上来说,继承是is-a关系,实现是like-a
Public公共的,任何类都可以进行访问
Protected受保护的(父类访问修饰符)
Private
默认(default):包访问受限
修饰类只能用默认或者public