Java学习之面向对象(1.Object类,(1)toString方法,(2)equals方法,2.对象转型(casting),3.动态绑定与多态,4.抽象类(abstract),5.Final关键字)
2013-03-17 14:53
831 查看
1.Object类
Object类是所有Java类的根基类;
如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类。
piblicclassPerson{
}
等价于:
publicclassPersonextendsObject{
}
(1)toString方法:
a.Object类中定义有public.StringtoString()方法,其返回值是String类型,描述当前对象的有关信息。
b.在运行String与其它类型数据的连续操作时(如:System.out.println("info"+person)),将自动调用该对象类的toString()方法。
c.可以根据需要在用户自定义类型中重写toString()方法。
输出结果:
d:I'macooldog
(2)equals方法:
(a)publicbooleanequals(Objectobj)方法,提供定义对象是否相等的逻辑。
(b)Object的equals方法定义为:x.equals(y),当x和y是同一个对象的应用时返回true否则返回false。
(c)可以格局需要在用户自定义类型中重写object方法。
输出结果:
false
true
false
true
2.对象转型(casting):
(a)一个基类的引用类型变量可以“指向”其子类的对象。
(b)一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。
(c)可以使用变量instanceof类名,来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。
(d)子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。
输出结果:
name:name
name:catname
blue eyes
name:dogname
black fur
3.动态绑定与多态
(a)动态绑定是指在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用相应的方法。
(b)多态的存在有3个必要条件:1.要有继承;2.要有重写;3父类对象指向子类对象。
输出结果:
猫叫声....
狗叫声.....
鸟叫声.....
4.抽象类(abstract)
(a)用abstract关键字来修饰一个类时,这个类叫做抽象类;
用abstract来修饰一个方法时,这个方法叫做抽象方法。
(b)含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。
(c)抽象类不能被实例化;
(d)抽象方法只需声明,而不需实现。
输出结果:
猫叫声....
5.Final关键字:
(1)final的变量的值不能够被改变。
(a)final的成员变量; publicvoidm(finalintj) //j的值不能在方法中赋值。
(b)final的局部变量(形参); finalinti=0; //i的值不能改变。
(2)final的方法不能够被重写。 publicfinalvoidm(){};//m方法不能被重写。
(3)final的类不能够被继承。 finalclasT{} // T不能被继承。
6.接口
Object类是所有Java类的根基类;
如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类。
piblicclassPerson{
}
等价于:
publicclassPersonextendsObject{
}
(1)toString方法:
a.Object类中定义有public.StringtoString()方法,其返回值是String类型,描述当前对象的有关信息。
b.在运行String与其它类型数据的连续操作时(如:System.out.println("info"+person)),将自动调用该对象类的toString()方法。
c.可以根据需要在用户自定义类型中重写toString()方法。
什么情况下要重写toString,object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。所以当你要想按照你想要的格式去字符串一些对象的时候,就需要重写toString了。比如一个Student对象,直接toString肯定是一个hash码。然而你想得到的比如是:name:***,age:***。这时就重写toString就是在toString里写:System.out.println(“name:”+student.getName); System.out.println(“age:”+student.getAge)。
classDog{ publicStringtoString(){//注意:重写toString方法"publicStringtoString()" return"I'macooldog"; } } publicclassTexttostring{ publicstaticvoidmain(String[]args){ Dogd=newDog(); System.out.println("d:"+d);//System.out.println("d:"+d);等价于System.out.println("d:"+d.toString()); } }
输出结果:
d:I'macooldog
(2)equals方法:
(a)publicbooleanequals(Objectobj)方法,提供定义对象是否相等的逻辑。
(b)Object的equals方法定义为:x.equals(y),当x和y是同一个对象的应用时返回true否则返回false。
(c)可以格局需要在用户自定义类型中重写object方法。
classCat{ privateintcolor; privateintheight; privateintweight; Cat(intcolor,intheight,intweight){ this.color=color; this.height=height; this.weight=weight; } publicbooleanequals(Objectobj){ if(obj==null)returnfalse; else{ if(objinstanceofCat){//判断obj是不是Cat对象的引用 Catc=(Cat)obj; if(c.color==this.color&&c.height==this.height&&c.weight==this.weight){ returntrue; } } } returnfalse; } } publicclassTextEquals{ publicstaticvoidmain(String[]args){ Catc1=newCat(1,1,2); Catc2=newCat(1,1,2); System.out.println(c1==c2);//比较c1,c2的引用 System.out.println(c1.equals(c2)); Strings1=newString("Hello"); Strings2=newString("Hello"); System.out.println(s1==s2); //比较s1,s2的引用 System.out.println(s1.equals(s2)); } }
输出结果:
false
true
false
true
2.对象转型(casting):
(a)一个基类的引用类型变量可以“指向”其子类的对象。
(b)一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。
(c)可以使用变量instanceof类名,来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。
(d)子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。
classAnimal{
publicStringname;
Animal(Stringname){
this.name=name;
}
}
classCatextendsAnimal{
publicStringeyecolor;
Cat(Stringname,Stringeyecolor){
super(name);
this.eyecolor=eyecolor;
}
}
classDogextendsAnimal{
publicStringfurcolor;
Dog(Stringname,Stringfurcolor){
super(name);
this.furcolor=furcolor;
}
}
publicclassTexttext{
publicstaticvoidmain(String[]args){
Texttexttext=newTexttext();
Animala=newAnimal("name");
Catc=newCat("catname","blue");
Dogd=newDog("dogname","black");
text.f(a);
text.f(c);
text.f(d);
}
publicvoidf(Animala){
System.out.println("name:"+a.name);
if(ainstanceofCat){
Catcat=(Cat)a;
System.out.println(cat.eyecolor+"\t"+"eyes");
}
elseif(ainstanceofDog){
Dogdog=(Dog)a;
System.out.println(dog.furcolor+"\t"+"fur");
}
}
}
输出结果:
name:name
name:catname
blue eyes
name:dogname
black fur
3.动态绑定与多态
(a)动态绑定是指在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用相应的方法。
(b)多态的存在有3个必要条件:1.要有继承;2.要有重写;3父类对象指向子类对象。
classAnimal{
publicStringname;
Animal(Stringname){
this.name=name;
}
publicvoidenjoy(){
System.out.println("叫声.....");
}
}
classDogextendsAnimal{
privateStringfurcolor;
Dog(Stringname,Stringfurcolor){
super(name);
this.furcolor=furcolor;
}
publicvoidenjoy(){
System.out.println("狗叫声.....");
}
}
classBirdextendsAnimal{
privateStringfeathercolor;
Bird(Stringname,Stringfeathercolor){
super(name);
this.feathercolor=feathercolor;
}
publicvoidenjoy(){
System.out.println("鸟叫声......");
}
}
classCatextendsAnimal{
privateStringeyecolor;
Cat(Stringname,Stringeyecolor){
super(name);
this.eyecolor=eyecolor;
}
publicvoidenjoy(){
System.out.println("猫叫声....");
}
}
classLadyextendsAnimal{
privateAnimalmypet;
Lady(Stringname,Animalmypet){
super(name);
this.mypet=mypet;
}
publicvoidmypetenjoy(){
mypet.enjoy();
}
}
publicclassTextduotai{
publicstaticvoidmain(String[]args){
Catcat=newCat("shabi","yellow");
Dogdog=newDog("dashabi","pink");
Birdbird=newBird("xiaoshabi","purple");
Ladyl1=newLady("erbi",cat);
Ladyl2=newLady("daerbi",dog);
Ladyl3=newLady("xiaoerbi",bird);
l1.mypetenjoy();
l2.mypetenjoy();
l3.mypetenjoy();
}
输出结果:
猫叫声....
狗叫声.....
鸟叫声.....
4.抽象类(abstract)
(a)用abstract关键字来修饰一个类时,这个类叫做抽象类;
用abstract来修饰一个方法时,这个方法叫做抽象方法。
(b)含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。
(c)抽象类不能被实例化;
(d)抽象方法只需声明,而不需实现。
abstractclassAnimal{
publicStringname;
Animal(Stringname){
this.name=name;
}
publicabstractvoidenjoy();
}
classDogextendsAnimal{
privateStringcolor;
Dog(Stringname,Stringcolor){
super(name);
this.color=color;
}
publicvoidenjoy(){
System.out.println("猫叫声....");
}
}
publicclassTextAbstract{
publicstaticvoidmain(String[]args){
//Animala=newAnimal();错误!抽象类不能被实例化;
Dogdog=newDog("abc","yellow");
dog.enjoy();
}
}
输出结果:
猫叫声....
5.Final关键字:
(1)final的变量的值不能够被改变。
(a)final的成员变量; publicvoidm(finalintj) //j的值不能在方法中赋值。
(b)final的局部变量(形参); finalinti=0; //i的值不能改变。
(2)final的方法不能够被重写。 publicfinalvoidm(){};//m方法不能被重写。
(3)final的类不能够被继承。 finalclasT{} // T不能被继承。
6.接口
相关文章推荐
- 马士兵J2SE-第三章-面向对象-Object类:toString方法、equals方法、对象转型、抽象类抽象方法、final关键字、接口
- Java面向对象8——对象转型,动态绑定,抽象类,final关键字及接口
- Java自学笔记(第八天)-多态-instanceof关键字-equals方法-toString方法-object类-class类-
- 对象转型casting 及其动态绑定及多态
- Lesson_for_java_day10--访问权限、static、对象转型、equals方法、toString方法、主函数
- Java基础-构造函数,覆写父类方法,多态及动态绑定,抽象类和Object类的运用
- Java学习资料-方法覆盖、方法重载、多态与动态绑定
- 5.4-全栈Java笔记:面向对象进阶之对象的转型 | FINAL关键字 |抽象方法和抽象类
- 黑马程序员_Java基础_03面向对象思想(对象转型注意事项、多态、抽象类、final关键字等)
- Java面向对象【经典案例】类的属性是属于对象的,方法是动态绑定到对象的
- java学习之旅40--面向对象_13_继承_Object类用法_toString和equals方法_重写toString
- 黑马程序员 Java基础 面向对象:继承、final关键字、抽象类、模版方法模式、接口、多态、Object类
- Java之面向对象例子(三) 多态,重写,重载,equals()方法和toString()方法的重写
- Java重修之路(九)面向对象之final关键字,抽象类(abstract),接口(interface)
- 【Java学习】Java方法的静态绑定与动态绑定讲解
- JAVA中几个易混淆关键词的理解:行为,隐藏,组合和继承,覆写和重载,多形(多态)性,动态绑定,上溯造型,抽象类,接口
- 黑马程序员—java基础学习--抽象类(abstract)、接口(interface)、多态
- NO8.java笔记【面向对象、抽象类、abstract、接口、interface、多态 、内部类、匿名内部类、异常、Object类】
- java中equals与hashCode还有tostring方法学习记录
- JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展