JAVAoooooo
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;
}
}
必须有强转换类型,把父类强转为子类
随机推荐
- Oracle 数据库版本路线图
经常会有客户困惑某个Oracle版本的支持周期,且希望得到确切的官方说明,其实这可以从MOS文档: Release Schedule of Current Database Releases (Doc ...
- Pandas练习
背景介绍 本数据集包括了2015年至2017年我国36个主要一线城市.特区的一些年度数据,包括产值.人口.就业.教育.医疗.经济贸易.房地产投资等方面. 包含文件: 2015年国内主要城市年度数据.c ...
- JS leetcode 存在重复元素 II 题解分析,记一次震惊的负向优化
壹 ❀ 引 整理下今天做的算法题,题目难度不高,但在优化角度也是费了一些功夫.题目来自219. 存在重复元素 II,问题描述如下: 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i ...
- 【Unity3D】动画回调函数、动画事件、动画曲线
1 动画回调函数 动画回调函数是指动画在开始时.执行中.结束时回调的函数,主要有:OnStateEnter.OnStateUpdate.OnStateExit.OnStateMove.OnStat ...
- Python三次样条插值与MATLAB三次样条插值简单案例
1 三次样条插值 早期工程师制图时,把富有弹性的细长木条(所谓样条)用压铁固定在样点上,在其他地方让它自由弯曲,然后沿木条画下曲线,成为样条曲线. 设函数S(x)∈C2[a,b] ,且在每个小区间[x ...
- spring boot使用自带缓存
项目地址:https://gitee.com/indexman/spring_boot_in_action 下面就介绍一下如何使用spring boot自带的缓存.按步骤来操作即可,不懂的可以去看项目 ...
- Java I/O 教程(一) 介绍
Java I/O (Input and Output) 用于处理输入和输出 Java利用流的手段来加快I/O操作.java.io包中包含了各种支持输入输出操作的类.参考下图: 我们可以利用java i ...
- 修改mysql默认字符集和排序规则
1.查看当前数据库字符集和排序规则 命令如下: mysql> SHOW VARIABLES LIKE 'collation_%'; mysql> SHOW VARIABLES LIKE ' ...
- C++ 多线程的错误和如何避免(2)
试图 join 一个已经 detach 的线程 如果你已经在某个地方分离了线程,那你不可以在主线程再次 join,这是一个明显的错误 比如: #include <iostream> #in ...
- win32 - this 指针
this指针是存在与类的成员函数中,指向被调用函数所在的类实例的地址. 根据以下程序来说明this指针, #include<iostream.h> class Point { int x, ...