Java03-动手动脑
Posted ruangongyouxi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java03-动手动脑相关的知识,希望对你有一定的参考价值。
Java03-动手动脑
继承条件下的构造方法调用:
源代码:
package 继承构造方法调用;
class Grandparent
{
public Grandparent()
{
System.out.println("GrandParent无参构造函数执行");
}
public Grandparent(String string)
{
System.out.println("GrandParent有参构造函数执行" + string);
}
}
class Parent extends Grandparent
{
public Parent()
{
//super("Hello.Grandparent.");
System.out.println("Parent构造函数执行");
// super("Hello.Grandparent.");
}
}
class Child extends Parent
{
public Child()
{
System.out.println("Child构造函数执行");
}
}
public class TestInherits
{
public static void main(String args[])
{
Child c = new Child();
}
}
心得:
构造函数是一种特殊的函数,其主要功能是用来在创建对象时初始化对象,即为对象成员变量赋初始值。由于子类继承了父类的属性和方法,因此在进行初始化的时候需要调用父类的构造函数进行初始化。
若使用super显式调用父类的构造函数,则必须将显式调用的构造语句放在子类的构造函数的第一条语句,否则,未执行父类的构造函数便执行子类的构造函数的其他语句程序将会报错。
在子类中调用父类中的同名函数:
源代码:
package super关键字调用测试;
class Parent{
private String name;
public void Shuohua() {
System.out.println("我是父类。");
}
}
class Chilren extends Parent{
private String name;
public void Shuohua() {
System.out.println("我是子类。");
}
public void Diaoyongzilei() {
Shuohua();
}
public void Diaoyongfulei() {
super.Shuohua();
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Chilren c=new Chilren();
c.Diaoyongzilei();
c.Diaoyongfulei();
}
}
心得:
若在子类中覆盖了父类中的方法,而在子类中又需要调用父类中的方法的时候则需要用super关键字进行调用,否则程序默认执行子类的方法。
子类父类对象相互赋值:
源代码:
package 子类父类对象相互赋值;
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;
//m=c;
//c=(Cat)m;
System.out.println("代码正确");
}
}
心得:
由于子类继承了父类的全部成员,因此拥有父类的全部属性和方法,因此可以赋值给父类实例化得到的对象。而父类则不一定拥有子类的全部成员,因此一般情况下不可以将其赋值给子类实例化得到的对象。若父类实例化得到的对象接受了子类实例化得到的对象的值,此时便可以对父类的对象进行强制数据转换,将其转换为子类的类型,此时将其赋值给子类的对象也是可以的。此外,继承于同一个父类的子类对象之间不可以相互赋值,也不可以进行彼此的数据类型强制转换。
子类父类有相同的字段:
源代码:
package 子类父类字段相同;
public class ParentChildTest {
public static void main(String[] args) {
Parent parent=new Parent();
parent.printValue();
Child child=new Child();
child.printValue();
parent=child;
parent.printValue();
parent.myValue++;//父类的属性++
parent.printValue();//调用子类的输出属性值函数,因此不能输出201
((Child)parent).myValue++;
parent.printValue();
((Child)parent).myValue++;
parent.printValue();
parent.myValue++;
parent.printValue();
}
}
class Parent{
public int myValue=100;
public void printValue() {
System.out.println("父类的方法,父类的属性值为:"+myValue);
}
}
class Child extends Parent{
public int myValue=200;
public void printValue() {
System.out.println("子类的方法,子类的属性值为:="+myValue);
}
}
心得:
若使用父类的变量引用子类的变量,当使用父类的变量名访问那些相同的方法时,访问的便是子类的方法,在子类的方法里面若是有对属性的访问,访问的便是子类的属性。若是通过这个父类的变量名加点的形式对属性进行直接访问,则修改的是父类自己的属性值。若想要修改子类的属性值,可以通过使用子类的变量名,或者将父类的变量转换为子类的数据类型,对属性值进行修改。
以上是关于Java03-动手动脑的主要内容,如果未能解决你的问题,请参考以下文章