`
chinagdszsuby
  • 浏览: 20976 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java基础(对象转型)-写给自己的博客

阅读更多
java基础(对象转型)-写给自己的博客


class AnimalClass//声明一个动物类
{

	public void printSuper()
	{
		System.out.println("printSuper:——>AnimalClass");
	}

	public void print()
	{
		System.out.println("print:——>AnimalClass");
	}
}

class Dog extends AnimalClass//声明一个狗类,并继承自动物类 AnimalClass
{
	public void printSub()
	{
		System.out.println("printSub:——>Dog ");
	}

	public void print()
	{
		System.out.println("print:——>Dog");
	}
}

public class TestAnimals
{
	public static void main(String[] args)
	{
		AnimalClass animal = new Dog();//声明一个子类Dog对象,并让其基类(animal)引用变量指向它'new Dog()'。
		//animal.printSub();//编译器报错,这说明基类的引用不能访问子类的新增成员(对象和方法)
		/*

		D:\java\object>javac testanimals.java
		testanimals.java:25: 找不到符号
		符号: 方法 printSub()
		位置: 类 AnimalClass
        animal.printSub();
                      ^
		1 错误

		*/
		//为了解决上面的问题,只能进行对象的强制转型
		Dog animalThree = (Dog)animal;
		animalThree.printSub();

		AnimalClass animalTwo = new Dog();
		animalTwo.print();/*为什么这个会打印出 print:——>Dog 这个结果,而不是 print:——>AnimalClass 呢?这个就是动态绑定机制。*/

	}
}



以下代码改自互联网

class Son extends Father {
 
 public void method1(){

  System.out.println("子类中的method1方法");
 }
 
 
 public void method2(){

  System.out.println("子类中的method2方法");
 }
 
 

}

//父类:
class Father {
 

 public Father(){

  System.out.println("Father中的this " + this);
 }
 
 public void init(){

  //System.out.println("init方法");
  this.method1();
  this.method2();
 }
 
 
 public void method1(){

  System.out.println("父类中的method1方法");
 }
 
 private void method2(){//注意此句中的private

  System.out.println("父类中的method2方法");
 }

}

//测试类:
public class ObjectClass {

 public static void main(String[] args) {

  Father fa = new Son();
  fa.init();
  //fa.method2();编译器报错,这说明fa引用虽然指向new Son()对象,但看到的只是继承过来的基类对象new Father()
  /*

  objectclass.java:54: method2() 可以在 Father 中访问 private
  fa.method2();
    ^
1 错误

  */
 /*不过我一直不明白,既然 看到的只是继承过来的基类对象new Father(),为何上面调用fa.init()方法是能对父类的method1()方法进行重写?希望高手拍砖释惑,谢谢~~!
 */
 /*今天总算把上面这个问题弄清楚了。之所以会出现上面的问题,是因为“动态绑定(值绑定)”机制在“做窜”(更主要是自己学艺不精)。
 */
  System.out.println("----------------------优美的分隔符-----------------------");
  

  Son s = (Son)fa;//强制转型
  s.init();
  s.method2();//经强制转型后,编译通过
  System.out.println("----------------------优美的分隔符-----------------------");

  Son s2 = new Son();
  s.init();
  s.method2();
 }

}


以上参考自《马士兵老师.尚学堂科技.JAVA.系列视频教程》以及互联网
2
2
分享到:
评论

相关推荐

    \\java类、抽象类、接口、继承和对象解析 .doc

    在 Java 中,当我们声明一个对象并使用 `new` 关键字时,实际上是创建了对象并在内存中分配空间,然后将对象的引用赋值给变量。如果只有引用而没有初始化,那么这个引用就是 null,试图通过 null 引用访问对象会抛出...

    学习Java之如何正确地向上转型与向下转型.rar

    向上转型是指将子类对象赋值给父类引用,这是一个隐式的过程,无需显式声明。例如: ```java Animal animal = new Dog(); // 向上转型 ``` 在这个例子中,虽然`animal`引用的是`Dog`实例,但它只能调用`Animal`类中...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。...

    Java入门一套搞定视频指导

    总结来说,"Java入门一套搞定"这套视频指导全面覆盖了Java学习的各个阶段,无论你是编程新手还是寻求转型的专业人士,都能从中受益。通过系统的学习和实践,你将具备独立开发Java应用程序的能力,为未来的职业发展...

    Java工程师职业规划

    首先,Java工程师的初期发展通常从学习基础语法开始,包括类、对象、接口、异常处理等核心概念。深入理解面向对象编程思想是至关重要的,这将为后续的项目开发打下坚实的基础。同时,熟悉JavaSE(标准版)和JavaEE...

    Java运行时多态性的实现.rar

    4. **向上转型(Upcasting)**:这是将子类对象赋值给父类引用的过程。例如,`Animal animal = new Cat();` 这里的animal引用可以视为Cat类型的实例,即使它实际是Cat类型。这使得我们可以在不具体知道对象类型的情况...

    基于Springboot开发的精简博客系统源码数据库.docx

    - Java 是一种面向对象的编程语言,广泛应用于企业级应用开发。 - 特性包括平台无关性、安全性高、强大的类库支持等。 3. **B/S架构**(Browser/Server): - 用户通过浏览器访问服务端提供的应用。 - 减少了...

    参考资料-软件工程专业学生优秀职业生涯规划(42页 字数12000).zip

    1. 编程基础:C/C++、Java、Python等语言是软件工程师的基础工具,学生应熟练掌握至少一种编程语言。 2. 数据结构与算法:理解并能应用各种数据结构(如数组、链表、树、图等)和优化算法(排序、搜索等),对提高...

    liferay架构

    1. **Java和J2EE**:Liferay基于Java语言开发,遵循J2EE标准,如EJB、JSP和Servlet,这使其具有良好的跨平台能力和扩展性。 2. **Spring框架**:Liferay大量使用Spring框架进行依赖注入、事务管理和AOP(面向切面...

Global site tag (gtag.js) - Google Analytics