关于父类和子类

本文通过Java代码示例介绍了如何实现类的继承及方法的重写,并展示了父类与子类对象调用方法的不同行为。
class Father{ 
void print(){

System.out.println ("父类的哦");
};

}

class Son extends Father{
void print(){
System.out.println("子类中!");//重写父类的方法(将会覆盖父类的方法)
}
void show(){
System.out.println("show 中!");
}
}
class Demo{

public static void main(String args[]){

// Father obj = new Father();
Father objFat = new Son(); //父类的对象指向子类
Son objSon =new Son();//子类的对象指向子类
objFat.print();//子类重写了父类的方法调用的是子类的方法(也是子类方法覆盖了父类的方法)
//objFat.show();//编译有错误(父类的对象调用子类的方法)
objSon.show();//子类的对象调用子类的方法;
}
}
### Java中父类子类的继承关系及使用方法 在Java中,父类子类的关系是面向对象编程中的重要概念之一。通过继承,子类可以复用父类的属性方法,并且可以对父类的方法进行重写以实现特定的功能。以下是关于Java中父类子类关系及用法的详细说明: #### 1. 继承的基本概念 继承是Java中实现代码复用的一种机制。一个类可以通过`extends`关键字继承另一个类,从而获得父类的所有非私有成员变量方法。例如: ```java class Animal { void eat() { System.out.println("The animal eats food"); } } class Dog extends Animal { void bark() { System.out.println("The dog barks"); } } ``` 在此示例中,`Dog`类继承了`Animal`类,因此`Dog`类具有`eat()`方法[^2]。 #### 2. 方法重写 子类可以通过定义与父类同名的方法来重写父类的方法。重写后,当通过子类对象调用该方法时,会执行子类中的实现。例如: ```java class Cat extends Animal { @Override void eat() { System.out.println("The cat eats fish"); } } ``` 在这个例子中,`Cat`类重写了`Animal`类的`eat()`方法,因此当通过`Cat`对象调用`eat()`方法时,输出将是“`The cat eats fish`”[^5]。 #### 3. 多态性 多态性是指同一个方法调用在不同的上下文中表现出不同的行为。在Java中,多态通常通过父类引用指向子类对象来实现。例如: ```java Animal myAnimal = new Dog(); myAnimal.eat(); // 输出 "The animal eats food" 或 "The dog barks"(取决于是否重写) ``` 如果`Dog`类重写了`eat()`方法,则输出将是子类的行为。这体现了多态性的特点:父类引用可以指向子类对象,并调用子类重写的方法[^3]。 #### 4. 访问控制 Java中的访问修饰符决定了子类父类成员的访问权限。具体规则如下: - `public`:子类可以完全访问。 - `protected`:子类可以访问,但仅限于同一包或子类中。 - 默认(无修饰符):子类在同一包内可以访问。 - `private`:子类无法访问[^4]。 #### 5. 向上转型与向下转型 - **向上转型**:将子类对象赋值给父类引用,这是隐式的,无需强制类型转换。 - **向下转型**:将父类引用转回子类对象,需要显式类型转换,但必须确保实际对象是子类类型,否则会抛出`ClassCastException`。 例如: ```java Animal myAnimal = new Dog(); // 向上转型 Dog myDog = (Dog) myAnimal; // 向下转型 ``` #### 6. 模板方法模式 模板方法模式是一种设计模式,其中父类定义了一个算法框架,而某些步骤由子类实现。这种方式实际上也可以看作是父类“调用”子类的方法。例如: ```java abstract class Template { final void execute() { stepOne(); stepTwo(); } abstract void stepOne(); abstract void stepTwo(); } class ConcreteTemplate extends Template { @Override void stepOne() { System.out.println("Step one in concrete class"); } @Override void stepTwo() { System.out.println("Step two in concrete class"); } } ``` 在这个例子中,`execute()`方法是父类定义的模板方法,而具体的步骤由子类实现[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值