类的组成:field & method属性和方法
类的写法基本和C++中无异
同C++,为了安全性,最好把所有的属性都设为private,使用方法来获取值或修改值,如果使用eclipse可以直接生成set和get方法,source-》Generate Getters and Setters,选择想要的属性即可
继承:java中一个子类只能有一个父类。
继承关键字extends: 比如父类Animal,子类Dog,都有属性int age
public class Dog extends Animal{
/*....*/
}
super关键字: 使用父类的内容。比如要使用父类的年龄则是super.age;
子类在执行构造参数的时候会先执行父类的构造方法,这条语句是隐藏的,即super();默认使用无参的构造参数,如果父类没有无参的构造方法,则必须显示使用super,比如Animal(int a) ,则在Dog()中是类似
public Dog(){
super(1);
}
这样的。
object类是java所有类的父类,如果没有用extends明确指出父类,则父类是object类
在Java中,如果我们输出一个类的名字(非字符串),得到他的地址值
System.out.println(dog);
如果我要得到dog的属性,那么我就要重写object类中的toString方法,在object类中toString()方法是返回对象的哈希Code值(对象地址字符串)。重写方法
public String toString(){
return "Dog [age=" + age + "]"//Dog类只有age一个属性
}
也可以使用eclipse,source-》Generate toString() 选择要生成的属性
object类中还有equals()方法,原来的equals()方法是判断两个对象的地址值是否相等,一般情况是不相等的。比如Dog dog=new Dog(); Dog dog1=new Dog();
这是分配了两个内存空间,地址自然不同 ,若我们要用来判断属性是否相等,则又要重载,eclipse重载如下
public boolean equals(Object obj){
if(this==obj)
return true;
if(obj==null)
return false;
if(this.getClass()!=obj.getClass())
return false;
Dog other = (Dog)obj;
if(this.age==other.age)
return true;
else return false;
}
这里的getClass是获得类对象的意思,与类的对象不同,类对象是代码信息,比如 该类有什么属性,变量名,方法,方法的代码。而类的对象关注的是数据信息。