1.类的声明:
类是由对象抽象出来的.类是对象的模板,是用来描述对象的.
例如:书:书号 书名编号 作者 价钱...
1.)变量的类型:
基本类型(8个基本数据类型)--->保存一个具体的数值
引用类型(非基本数据类型)--->保存对象的地址值
2.)变量的分配:
基本类型:根据数据类型决定。
引用类型:引用类型占用的空间大小和值
得管理是不可见的(透明的).
由java系统管理
3.) 对象的分配:
对象在堆中分配.
分配空间的大小由类中声明的属性来决定.
对象的属性默认自动初始化
对象创建出来以后,会把对象的属性赋初始值.
2.Java中的构造方法(构造器)
1.)java中的构造器声明在类的内部,方法名与类名是一致的。
构造方法不能声明返回值类型.
构造方法可以包含参数,参数一般是创建对象实例必须很依赖的条件。
构造方法是通过new关键字调用的.
注意:
没有参数的构造方法是默认的构造方法
如果程序员没有显示的写出来,系统会自动提供一个默认的构造方法.
当显示的写出了一个构造器(不管有没有参数)系统不会再提供无参数的构造器.
例如: Point{
public Point(参数){
}
}
2.)this关键字:
this代表当前对象的引用.是运行期间当前对象本身。
通过this明确的访问当前对象的属性或者方法
this()可以调用本类的其他构造方法.
this()必须写到构造方法的第一行.
3.)构造方法的重载:
在一个类中,定义了多个方法名相同但是参数列表不同的方法.
可以通过重载简化代码的实现.
对象的方法.
方法表示对象的功能,依赖于对象存在,对象的方法在定义的时候不用static修饰(先记住)
方法的重载:
在一个类中,写了多个方法名相同,参数列表不同的方法,这种现象就叫方法的重载.
可以通过方法的重载实现代码的重用.方法的重载现象可以满足调用的时候的不同情况.
3.方法
1.方法签名
方法名+参数列表
在一个java类中,
不能存在方法签名相同的方法。
方法的重载:
方法名一样,方法签名是不一样的多个方法.
例如:public void a(int b){}
public void a(int c){}
2.方法的调用原则
就近调用
java尽可能采用简单的转换原则.
char-->int--->long
3.java方法参数的传递规则
java中参数的传递规则是:基于值的传递
基本类型:传递具体的值
引用类型:传递引用地址
int a = 5 ;
Point p = new Point(); p-->@6ecd6
4.继承:
用来表达概念上具体化延续的具体概念.
子类继承父类的属性和方法
构造器是不能继承的
继承的语法:
extends实现继承
A extends B
继承的好处:
实现代码的重用.
实现多态的现象.
多态
父类的引用变量指向子类的对象.
子类是父类.
Dog extends Animal
狗是动物
编译期
看声明的类是声明类型.
Question q ;
q就是Question类型
运行期
看具体的对象
Question q = new SingleQuestion();
编译期q是Question类型
运行期间q引用的是子类的对象
因此调用方法的时候调用的是子类的对象.
Question q = new SingleQuestion();
q.check(); 运行的时候调用的是SingleQuestion类中的check方法
Question q = new MultChoiceQuestion();
q.check();运行的时候调用的是MultChoiceQuestion类中的check方法.
4.继承器中的构造器
* 1.子类一定调用父类的构造器
* 在子类的构造器中通过super()来调用父类的构造器
* 2.子类默认调用父类的无参数构造器
* 3.如果父类中没有无参数的构造器,那么在子类的构造器中
* 需要通过super(参数)去调用父类的有参数构造器,不管怎么着,子类必须要调到父类中的某一个构造器.
* 4.this() super()都必须要写到构造器的第一行
* 因此this() super()不能同时出现在一个构造器中.
5.对象的实例化过程
1.在创建对象之前,首先会检查此类是否被加载.(就是将硬盘上的XXX.class文件加载到内存中),如果没有加载就加载这个类,并且在这个类, 被加载之前要加载所有的父类.
2.在内存中分配对象空间,递归分配所有父类和子类属性空间。
属性默认自动初始化为对应类型的初始值.
3.给属性进行赋值
4.递归调用父类构造器
一、子类继承父类时需要注意的:
(1)父类的构造方法不能被继承,构造方法只属于定义它们的类本身。当创建一个子类对象时,子类构造方法首先调用父类的构造方法并执行,接着执行子类构造方法。
(2)子类不能访问父类的private成员。
(3)子类通过成员属性变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为。
注意:重写后的方法不能比被重写的方法有更 严格的访问权限。
其中,优先级从大到小: public protected packge private
二、super关键字
(1)调用父类的构造方法:super([参数列表]);
注意:必须是子类构造方法中的头一条语句。
(2)如果在子类的构造方法中,没有显式地使用 super关键字调用父类的某个构造方法,那么默认地有:super( );语句,即调用父类的不带参数的构造方法。
注意:这不是继承父类的构造方法,而是将父类的构造方法调用在子类的构造方法中
三、final 关键字
(1)final标记的类不能被继承。(声明一个final类就意味着它的所有方法也都是final的,但其中的成员变量未必是final的)
(2)final标记的方法不能被子类重写。
(3)final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次,这种赋值既可以在声明的同时进行,也可以在类的构造方法中进行。
(4)public static final共同标记常量时,该常量成为全局常量。如:public static final int PI=3;
四、抽象类 ,用abstract修饰
(1) 定义一个抽象类的格式如下:
abstract class AbstractClass
{
……
}
抽象类不能被实例化,如果new AbstractClass( ); //编译错误
(2)含有抽象方法的类必须被声明为抽象类,抽象类的子类必须重写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。
注意: 含有抽象方法的类一定是抽象类,抽象类中的某个方法不一定是抽象的。
(3)声明一个既是abstract又是final的类是不合法的,因为抽象类本身是不完整的,它依靠它的子类提供完整的实现。