class Grandparent
{
public Grandparent()
{
System.out.println("GrandParent Created.");
}
public Grandparent(String string)
{
System.out.println("GrandParent Created.String:" + string);
}
}
class Parent extends Grandparent
{
public Parent()
{
//super("Hello.Grandparent."); System.out.println("Parent Created"); // super("Hello.Grandparent.");
}
}
class Child extends Parent
{
public Child()
{
System.out.println("Child Created");
}
}
public class TestInherits
{
public static void main(String args[])
{
Child c = new Child();
}
}

让我们意料之内的是,爷爷父亲儿子连续继承的时候,先调用爷爷的默认构造函数,在调用父亲的默认构造函数,在调用儿子的构造函数

以final声明的方法不允许覆盖。

以final声明的变量不允许更改。

利用final,可以设计出一种特殊的“只读” 的“不可变类”。

public class ExplorationJDKSource {

    /**
* @param args
*/
public static void main(String[] args) {
System.out.println(new A());
} } class A{}

此示例中定义了一个类A,它没有任何成员:直接输出这个类所创建的对象

我们发现打印了一个奇怪的东西

A@1279f2327

前面示例中,main方法实际上调用的是: public void println(Object x),这一方法内部调用了String类的valueOf方法。

valueOf方法内部又调用Object.toString方法: public String toString() { return getClass().getName() +"@" + Integer.toHexString(hashCode()); }

hashCode方法是本地方法,由JVM设计者实现: public native int hashCode();

在Java中,所有的类都派生自Object

Object是大爹是祖宗的祖宗

public class Fruit
{ public String toString()
{
return "Fruit toString.";
} public static void main(String args[])
{
Fruit f=new Fruit();
System.out.println("f="+f);
// System.out.println("f="+f.toString());
}
}

Fruit类覆盖了Object类的toString方法。构造函数返回的是一个字符串,然后对象就是调用toString

结论:

在“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。

为了返回有意义的信息,子类可以重写toString()方法。

class Parent
{
void message()
{
System.out.println("父亲的散文诗");
}
} class Child extends Parent
{ void message()
{
System.out.println("孩子的散文诗");
}
void test01()
{
super.message();
}
} public class TestInherits
{
public static void main(String args[])
{ Child c = new Child();
c.test01();
}
}

在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

重写调用了父类的散文诗方法

public class TestInstanceof
{
public static void main(String[] args)
{ Object hello = "Hello"; System.out.println(" Object " + (hello instanceof Object)); System.out.println(" String " + (hello instanceof String)); System.out.println(" Math " + (hello instanceof Math)); System.out.println(" Comparable " + (hello instanceof Comparable));
String a = "Hello"; }
}

class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{} public class TestCast
{
public static void main(String args[])
{
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
m=d;
//d=m;
d=(Dog)m;//必须加强转换
//d=c;
//c=(Cat)m; }
}

必须有强转换类型,把父类强转为子类

随机推荐

  1. 实现阿里云模型服务灵积 DashScope 的 Semantic Kernel Connector

    Semantic Kernel 内置的 IChatCompletionService 实现只支持 OpenAI 与 Azure OpenAI,而我却打算结合 DashScope(阿里云模型服务灵积) ...

  2. MYSQL 1 DAY

    目录 MySQL 1.sql.DB.DBMS分别是什么,他们之间的关系? 2.什么是表? 3.学习MySQL主要还是学习通用的SQL语句,那么SQL语句包括增删改查,SQL语句怎么分类呢? 4.导入数 ...

  3. python常用的搜索字符内容函数详解:re.findall/findfiter

    区别findall返回listfinditer返回一个MatchObject类型的iterator详细举例介绍1.findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹 ...

  4. PCIE详解

    老男孩读PCIe之一:从PCIe速度说起 从今天开始,老男孩要开始讲PCIe了.对我来说,这是个很大的挑战:首先,我自己本身,对PCIe并没有做到胸有成竹,我的PCIe知识也只是停留在理论阶段,我并没 ...

  5. 用 WebClient 代替 RestTemplate

    RestTemplate是用于执行 HTTP 请求的同步客户端,通过底层 HTTP 客户端库(例如 JDK HttpURLConnection.Apache HttpComponents 等)公开一个 ...

  6. Python之正则表达式匹配电话号码和邮箱

    代码 #! python3 # phoneAndEmail.py - Finds phone numbers and email addresses on Clipboard import pyper ...

  7. 《系列二》-- 8、单例bean的创建

    目录 1 源码入口概述 2 getSingleton(beanName, ObjectFactory) 的行为 总结 阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需 ...

  8. win32- GetWindowText

    从编辑框中获取控件文本 一般常用的方法是, wchar_t buffer[100]; GetWindowText(hWnd, buffer, sizeof(buffer) / sizeof(buffe ...

  9. 【Android 抓包对抗】客户端证书和域名校验绕过

    1. 按照之前的方式(https://www.cnblogs.com/gradyblog/p/17197707.html)进行抓包发现证书校验失败 SSL handshake with client ...

  10. java怎么打印一个对象的内存地址

    在Java一般使用HashCode来代表对象的地址,但是两个相同的对象就不行了,两个相同的对象的hashcode是相同的. 如果要对比两个相同的对象的地址可以使用,System.identityHas ...