主函数是静态的。
成员分两种:
成员变量。(数据共享时静态化) 该成员变量的数据是否是所有对象都一样: 如果是,那么该变量需要被静态修饰,因为是共享的数据。如果不是,那么就说这是对象特有的数据,需要存储到对象中。
成员函数。(方法中没有调用特有数据时就定义成静态) 如果判断成员函数是是否需要被静态修饰呢? 只要参考,该函数内是否访问了对象中的特有数据: 如果没有访问特有数据,那方法不能被静态修饰。 如果没有访问过特有数据,那么这个方法需要被静态修饰。
什么时候定义静态成员呢?或者说:定义成员时,到底需不需要被静态修饰呢?
成员变量和静态变量的区别
成员变量所属于对象,所以也称为实例变量。 静态变量所属于类,所以也称为类变量。成员变量存在于对内存中。 静态变量存在于方法区中。成员变量随着对象创建而存在。随着对象被收回而消失。 静态变量随着类的加载而存在。随着类的消失而消失。成员变量只能被对象所调用。 静态变量可以被对象调用,也可以被类名调用。 所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据Person p = new Person(); 创建一个对象都在对内存中做了些什么事? 静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块-构造代码块-构造函数;
继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承可以理解为一个对象从另一个对象获取属性的过程。
如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来的。在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类
继承中最常使用的两个关键字是extends和implements。
这两个关键字的使用决定了一个对象和另一个对象是否是IS-A(是一个)关系。
通过使用这两个关键字,我们能实现一个对象获取另一个对象的属性。
所有Java的类均是由java.lang.Object类继承而来的,所以Object是所有类的祖先类,而除了Object外,所有类必须有一个父类。
通过过extends关键字可以申明一个类是继承另外一个类而来
通过使用关键字extends,子类可以继承父类的除private属性外所有的属性。使用instanceof 操作符。
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。 this关键字:指向自己的引用。
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写: 声明类: final class 类名 {//类体} 声明方法: 修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体} 注:实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final
子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。 如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
简单来说就是同一个行为具有多个不同的表现形式或形态的能力。
多态一半分为两种:重写式多态和重载式多态。
重载式多态,也叫编译时多态。也就是说这种多态在编译时已经确定好了。
重写式多态,也叫运行时多态是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相对应的方法。也就是说,只有运行起来你才知道调用的是哪个子类的方法。