类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性
对象可以看成该类的一个具体实例
继承关系:xx是一种xx
成员变量未赋值默认初始化,一般是false,0,null;局部变量不会默认初始化
对象是new出来的,分配在动态内存里,堆;类的每个成员变量在不同的对象中都有不同的值(除了静态变量),方法只有一份,只有调用时占用内存
构造函数是定义在java类中的一个用来初始化对象的函数,构造方法与类同名且没有返回值
public class Person{
int i;
int j;
Person(int _id,int_age){
i=_id;
j=_age;
}
}
重载是指一个类中可以有多个名字相同,但参数不同的方法;构造方法也可以重载
this可以看做一个变量,他的值是当前对象的引用
static关键字,声明的变量为类的全局变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份
静态方法不可以引用非静态成员
可以通过对象引用或类名访问静态成员
package命名:公司名字倒过来
java.lang不需要引用
打jar包:jar -cvf xx.jar *.*
重写:
子类可以对继承基类的方法进行重写
重写方法必须和被重写方法具有相同的名称、参数和返回类型
重写方法不能使用比被重写方法更为严格的访问权限
继承中的构造方法
子类的构造过程必须调用父类的构造方法
子类可以在自己的构造方法中使用super(argument_list)方法调用父类方法
使用this(argument_list)调用本类的其他构造方法
super必须写在构造方法第一行
子类如果没有显性的调用构造方法,默认调用无参构造方法
Object类
没有extends的类默认继承Object
equals:默认实现相当于a==b,需要重写
public boolean equals(Object obj){
if(obj==null)return false;
else {
if(obj instanceof Cat){
Cat c =(Cat)obj;
if(c.color==this.color && c.weight==this.color){
return true;
}
}
}
return false;
}
对象转型
一个基类引用可以“指向“”子类对象 Father f=new Sun()
一个基类引用不可以访问子类新增加的对象
可以使用instanceof来判断该引用类型变量所“指向”的对象是否属于该类或者该类的子类
子类的对象可以当做基类的对象来使用称作向上转型,反正称为向下转型
动态绑定是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法
多态存在有3个条件:
1.要有继承
2.要有重写
3.父类引用指向子类对象
new的是哪个子类对象,调用的就是那个子类的方法
class Animal{
private String name;
Animal(String name){
this.name=name;
}
public void enjoy(){
System.out.println("叫声");
}
}
class Dog extends Animal{
private String dogColor;
Dog(String n,String c){
Super(n);
dogColor=c;
}
public void enjoy(){
System.out.println("狗叫声");
}
}
class Cat extends Animal{
private String catColor;
Cat(String n,Stringc){
Super(n);
catColor=c;
}
public void enjoy(){
System.out.println("猫叫声");
}
}
class Lady{
private String name;
private Animal pet;
Lady(String name,Animal pet){
this.name=name;
this.pet=pet;
}
public void myPetEnjoy(){
pet.enjoy();
}
}
public class Test{
public static void main (String args[]){
Cat c = new Cat("catname","blue");
Dog d = new Dog("dogname","black");
Lady l1 =new Lady("l1",c);
Lady l2 = new Lady("l2",d);
l1.myPetEnjoy();
l2.myPetEnjoy();
}
}
抽象类
abstract关键字修饰类或者方法
含有抽象方法的类必须被申明为抽象类,抽象类必须被继承,抽象方法必须被重写
抽象类不能被实例化
抽象方法只需申明,不需实现
final
final的变量的值不能被改变
final的方法不能被重写
final的类不能被继承
接口
接口是抽象方法和常量值的定义的集合
接口是特殊的抽象类,只有常量和方法的定义,而没有变量和方法的实现
接口可以多重实现
接口中声明的属性是pubilc static final,也只能是
接口中声明的方法只能是public
接口可以继承