JavaSE入门学习24:Java面向对象补充
一Java中的Object类
Object类是全部Java类的父类。假设一个类没有使用extendskeyword明白标识继承另外一个类,那么这个类默认
继承Object类。
public class Person{ // } //等价于 public class Person extends Object{ // }
Object类中的方法,适合全部子类。
1)toString()方法
在Object类中定义有public String toString()方法,其返回值是String类型。描写叙述当前对象的有关信息。在进行
String与其类型数据的连接操作时(如:System.ouy.println("info"+person)),将自己主动调用对象类的toString()方法。也可
以依据须要在用户自己定义类型中重写toString()方法
实例:
public class Test{ public static void main(String[] arge){ Dog d = new Dog(); System.out.println(d); System.out.println("d:"+d); System.out.println("d:"+d.toString()); } } class Dog{ public String toString(){ return "I am a dog"; } }
执行结果:
2)equals()方法
比較的是对象的引用是否指向同一块内存地址。普通情况下比較两个对象时比較它们的值是否一致。所以要进行
重写。
Object类中定义有:public boolean equals(Object obj)方法提供定义对象类型
实例:
public class Test{ public static void main(String[] arge){ String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2);//比較对象的地址 System.out.println(s1.equals(s2));//比較对象的内容 } }
执行结果:
二对象转型(casting)
一个基类的引用类型变量能够指向其子类的对象。
一个基类的引用不能够訪问其子类对象新增的成员(属性和方法);
能够使用 引用变量 instanceof 类名 来推断该引用型变量所指向的对象是否属于该类或该类的子类。
子类的对象能够当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。 向上转型是基类或父类的引用指向子类对象。 这个在前面的样例中我们遇到非常多,这里就不再多说,能够參考:JavaSE入门学习18:Java面向对象之多态。 动态绑定是指在运行期间(而非编译期)推断所引用对象的实际类型,依据事实上际的类型调用其对应的方法。
以下样例中。依据Lady对象的成员变量pet所引用的不同的实际类型而调用对应的enjoy()方法。 也就是你new的是 那个类型调用的就是该类型的enjoy()方法 实例代码:
执行结果: 对于可扩展性的理解: 改写上述的样例: 加入一个Bird类:
改写main方法:
执行结果: 多态特性对于系统可扩充性的重要性 继续改写鸟类:
改写mian方法:
执行结果: 1)要有继承 3)父类引用指向子类对象
三动态绑定(池绑定)与多态
class Animal{
private String name;
//构造方法
Animal(String name){
this.name = name;
}
public void enjoy(){
System.out.println("叫声......");
}
}
class Cat extends Animal{
private String eyesColor;
//构造方法
Cat(String name,String eyesColor){
//调用父类的构造函数
super(name);
this.eyesColor = eyesColor;
}
//重写父类Animal的enjoy()方法
public void enjoy(){
System.out.println("猫叫声......");
}
}
class Dog extends Animal{
private String furColor;
//构造方法
Dog(String name,String furColor){
//调用父类的构造方法
super(name);
this.furColor = furColor;
}
//重写父类Animal的enjoy()方法
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[] arge){
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();
}
}
class Bird extends Animal{
//构造方法
Bird(){
//调用父类的构造方法
super("bird");
}
//重写父类Animal的enjoy()方法
public void enjoy(){
System.out.println("鸟叫声......");
}
}
public class Test{
public static void main(String[] arge){
Cat c = new Cat("catname","blue");
Dog d = new Dog("dogname","black");
Bird b = new Bird();
Lady l1 = new Lady("l1",c);
Lady l2 = new Lady("l2",d);
Lady l3 = new Lady("l3",b);
l1.myPetEnjoy();
l2.myPetEnjoy();
l3.myPetEnjoy();
}
}
class Bird extends Animal{
private String featherColor;
//构造方法
Bird(String name,String featherColor){
//调用父类的构造方法
super(name);
this.featherColor = featherColor;
}
//重写父类Animal的enjoy()方法
public void enjoy(){
System.out.println("鸟叫声......");
}
}
public class Test{
public static void main(String[] arge){
Lady l4 = new Lady("l4",new Bird("birdname","green"));
l4.myPetEnjoy();
}
}
多态的条件:
相关文章
- Java 类的方法总结-目前网上最完整9种方法总结
- Error java 错误 不支持发行版本5 ( 完美解决版)
- Dockerfile 部署Java tomcat
- 【Java实习生】每日10道面试题打卡!
- Java位运算符
- GitHub上那些值得一试的JAVA开源库
- java程序编译打包出错 the version cannot be empty错误分析
- java 按字节读写二进制文件(Base64编码解码)
- 【JavaSE】如何简化Java的异常处理?try-with-resource语句的使用
- 华为OD机试 - TLV解码(Java) | 机试题+算法思路+考点+代码解析 【2023】
- JavaSE入门学习6:Java基础语法之运算符和语句(上)
- 定点爆破_阿里java研发笔试