-
java子类调用父类方法_java子类调用父类的方法中包含子类重写的实例方法
2021-02-12 13:23:20} } # 上面的代码的输出结果是: com.qq.demo.common.Sub # 大致流程是 main 中调用子类的 testSub()方法 -- testSub()方法中调用父类的testParent() 方法 -- testParent() 方法调用test()方法;需要注意的是test()...# 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了
# 先看代码:
public class Common {
public static void main(String[] args) {
Sub sub = new Sub();
sub.testSub();
}
}
class Parent {
protected boolean test() {
throw new RuntimeException();
}
protected void testParent() {
if (test()) {
System.out.println(this.getClass().getName());
}
}
}
class Sub extends Parent {
public void testSub() {
super.testParent();
}
@Override
public boolean test() {
return true;
}
}
# 上面的代码的输出结果是:
com.qq.demo.common.Sub
# 大致流程是 main 中调用子类的 testSub()方法 -- testSub()方法中调用父类的testParent() 方法 -- testParent() 方法调用test()方法;需要注意的是test()方法在父类和子类中都存在,子类重写了父类的test()方法;
以上就是本次介绍的全部知识点内容,感谢大家的阅读和对脚本之家的支持。
-
java子类调用父类的方法中包含子类重写的实例方法
2020-08-25 15:28:00在本篇文章里小编给大家整理了关于java子类调用父类的方法中包含子类重写的实例方法以及相关知识点,需要的朋友们可以学习下。 -
java 调用父级方法_java子类调用父类的方法是什么
2021-02-06 21:34:33java子类调用父类的方法:1、子类的对象调用方法时,会首先在子类中查找,如果子类中没有该方法,再到父类中查找;2、如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找。...java子类调用父类的方法:1、子类的对象调用方法时,会首先在子类中查找,如果子类中没有该方法,再到父类中查找;2、如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找。
【相关学习推荐:java基础教程】
java子类调用父类的方法:
当一个类继承于另一个类,子类中没有父类的方法时。用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找。
当一个方法只在父类中定义时,调用该方法时会使用父类中的属性。
如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找。package Temp;
class A {
int x = 6;
private int y = 2;
public A(int a) {
x = a;
}
int getz() {
int z;
z = x / y;
return z;
}
void show() {
System.out.println("x=" + x);
System.out.println("y=" + y);
System.out.println("z=" + getz());
}
}
class B extends A {
int x = 3, y = 5, z;
public B(int a) {
super(a);
}
int getz() {
z = x + y;
return z;
}
}
public class Temp {
public static void main(String[] args) {
A num1 = new A(10);
B num2 = new B(9);
num1.show();
num2.show();
}
}
结果是:x=10
y=2
z=5
x=9
y=2
z=8
-
子类调用父类构造方法 java_JAVA子类调用父类构造方法
2021-03-06 16:59:23父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。public class MyException extends Exception{} //MyException类只有一个隐含的默认构造方法尽管在Exception类中定义了如下...父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。
public class MyException extends Exception{} //
MyException类只有一个隐含的默认构造方法
尽管在Exception类中定义了如下形式的构造方法:
public Exception(String msg)
但MyException类不会继承以上Exception类的构造方法,因此以下代码是不合法的。
//编译出错,MyException类不存在这样的构造方法
Exception e=new MyException("Something is error");
在子类的构造方法中,可以通过super语句调用父类的构造方法。例如:
public class MyException extends Exception{
public MyException(){
//调用Exception父类的Exception(String msg)构造方法
super("Something is error");
}
public MyException(String msg){
//调用Exception父类的Exception(String msg)构造方法
super(msg);
}
}
用super语句来调用父类的构造方法时,必须遵守以下语法规则。
l
在子类的构造方法中,不能直接通过父类方法名调用父类的构造方法,而是要使用super语句,以下代码是非法的:
public MyException(String msg){
Exception(msg); //编译错误
}
l
假如在子类的构造方法中有super语句,它必须作为构造方法的第一条语句,以下代码是非法的:
public MyException(){
String msg= "Something wrong";
super(msg); //编译错误,super语句必须作为构造方法的第一条语句
}
在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化。例如以下父类Base和子类Sub分别有一个实例变量a和b,当构造Sub实例时,这两个实例变量都会被初始化。
public class Base{
private int a;
public Base(int a){ this.a=a;}
public int getA(){return a;}
}
public class Sub extends Base{
private int b;
public Sub(int a,int b){super(a); this.b=b;}
public int getB(){return b;}
public static void main(String args[]){
Sub sub=new Sub(1,2);
System.out.println("a="+sub.getA()+" b="+sub.getB()); //打印a=1
b=2
}
}
在例程11-3(Son.java)中,Son类继承Father类,Father类继承Grandpa类。这3个类都显式定义了默认的构造方法,此外还定义了一个带参数的构造方法。
例程11-3 Son.java
class Grandpa{
protected Grandpa(){
System.out.println("default Grandpa");
}
public Grandpa(String name){
System.out.println(name);
}
}
class Father extends Grandpa{
protected Father(){
System.out.println("default Father");
}
public Father(String grandpaName,String fatherName){
super(grandpaName);
System.out.println(fatherName);
}
}
public class Son extends Father{
public Son(){
System.out.println("default Son");
}
public Son(String grandpaName,String fatherName,String
sonName){
super(grandpaName,fatherName);
System.out.println(sonName);
}
public static void main(String args[]){
Son s1= new Son("My Grandpa", "My Father", "My Son"); //①
Son s2=new Son(); //②
}
}
执行以上main()方法的第①条语句,打印结果如下:
My Grandpa
My Father
My Son
此时构造方法的执行顺序如图11-1所示。
如果子类的构造方法没有用super语句显式调用父类的构造方法,那么通过这个构造方法创建子类对象时,Java虚拟机会自动先调用父类的默认构造方法。执行以上Son类的main()方法的第②条语句,打印结果如下:
default Grandpa
default Father
default Son
-
java如何调用父类的实例对象_java子类调用父类的方法中包含子类重写的实例方法...
2021-03-22 17:57:43java子类调用父类的方法中包含子类重写的实例方法# 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了# 先看代码:public class Common {public static void main(String[] args) {Sub sub = new Sub();...java子类调用父类的方法中包含子类重写的实例方法
# 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了
# 先看代码:
public class Common {
public static void main(String[] args) {
Sub sub = new Sub();
sub.testSub();
}
}
class Parent {
protected boolean test() {
throw new RuntimeException();
}
protected void testParent() {
if (test()) {
System.out.println(this.getClass().getName());
}
}
}
class Sub extends Parent {
public void testSub() {
super.testParent();
}
@Override
public boolean test() {
return true;
}
}
# 上面的代码的输出结果是:
com.qq.demo.common.Sub
# 大致流程是 main 中调用子类的 testSub()方法 -- testSub()方法中调用父类的testParent() 方法 -- testParent() 方法调用test()方法;需要注意的是test()方法在父类和子类中都存在,子类重写了父类的test()方法;
以上就是本次介绍的全部知识点内容,感谢大家的阅读和对我们的支持。
时间: 2019-09-11
父类能调用子类的方法吗? 答:能. 怎么做? 把子类传递到父类的有参构造中,然后调用. 使用反射的方式调用,你使用了反射还有谁不能调用的?! 父类调用子类的静态方法. 案例展示: package com.ywq; public class Test2{ public static void main(String[] args) { Son son = new Son(); Father father=new Father(son); father.fun1(); father.fun4();
本文实例讲述了Java序列化中子类.父类构造函数问题.分享给大家供大家参考,具体如下: 一 介绍 1.如果父类实现了序列化接口,子类就不需要实现序列化接口. 2.创建对象的时候,递归调用了父类的构造函数. 3.对子类对象进行反序列化操作时,如果其父类没有实现序列化接口,那么其父类的构造函数会被调用,否则不会被调用. 二 实例 package com.imooc.io; import java.io.FileInputStream; import java.io.FileOutputStream;
前言 "Java 和 C++ 中子类对父类函数覆盖的可访问性缩小的问题"的题目看起来比较学术化,但的确是一个容易忽视的问题.本文力求详细阐述这一问题在 Java 以及 C++ 中的区别. 先介绍什么是"子类对父类函数覆盖的可访问性缩小".对于继承而言,子类可以覆盖父类的"虚函数"--尽管 Java 中没有虚函数这一术语,但可以把 Java 的所有函数都看作虚函数,因为 Java 的所有函数都可以被子类覆盖.这里仅借用"虚函数"
编写程序实现比萨制作.需求说明编写程序,接收用户输入的信息,选择需要制作的比萨.可供选择的比萨有:培根比萨和海鲜比萨. 实现思路及关键代码 1)分析培根比萨和海鲜比萨 2)定义比萨类 3)属性:名称.价格.大小 4)方法:展示 5)定义培根比萨和海鲜比萨继承自比萨类 6)定义比萨工厂类,根据输入信息产生具体的比萨对象 Pizza.java package zuoye; import java.util.Scanner; //父类 public class Pizza { String name;
Java中子类覆盖父类方法抛出异常不能比父类多,这个表述不够准确. 准确一点的描述为: 子类抛出的异常类型不能比父类抛出的异常类型更宽泛.假设父类抛出异常ParentException,另外有两个子类继承自ParentException分别为ChildException1, ChildException2, 那么 子类可以同时抛出异常ChildException1,ChildException2. 满足"子类抛出的异常类型不能比父类抛出的异常类型更宽泛",这一条件. 注意: 子类也可以
子类重新实现父类的方法称重写:重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改:仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类:要么就不修改,与父类返回值类型相同.那么,该如何理解呢?为什么要是父类返回值类型的子类? 提出问题:子类必须重写父类所有方法吗? Java,子类不是必须重写父类所有方法的,分为以下两种情况: 父类方法为抽象方法时,子类必须重写(实现)所有父类的抽象方法: 父类方法为普通方法时,子类可以重写父类方法,也可以不重写
重载:方法名相同,但参数不同的多个同名函数 注意:1.参数不同的意思是参数类型.参数个数.参数顺序至少有一个不同 2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg:void a ()和int a() ,如果调用a(),出现歧义) 3.main方法也是可以被重载的 覆盖:子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同 两同两小一大 注意:子类实例方法不能覆盖父类的
我们首先看代码: Class c = ArrayList.class; c.isPrimitive(); //判断c是否为基本数据类型 c.isAssignableFrom(List.class); //判断c是否是List类的子类或父类 c.getGenericType(); //得到泛型类型 实例:通过反射得到List 集合中的泛型类型 package com.zf.target; import java.lang.reflect.Field; import java.lang.re
异常与错误: 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它.Java中使用异常类来表示异常,不同的异常类代表了不同的异常.但是在Java中所有的异常都有一个基类,叫做Exception. 错误: 它指的是一个合理的应用程序不能截获的严重的问题.大多数都是反常的情况.错误是VM的一个故障(虽然它可以是任何系统级的服务).
在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的? 答案如下: 当你new一个子类对象的时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以: 第一个规则:子类的构造过程中,必须调用其父类的构造方
说到java中的重载和覆盖呢,大家都很熟悉了吧,但是呢我今天就要写这个. 本文主题: 一.什么是重载 二.什么是覆盖 三.两者之间的区别 重载(overload): 在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了. 即当函数同名时,只看参数列表.和返回值类型没关系. 重载使用的时候需要注意: 1.在使用重载时只能通过不同的参数样式.例如,不同的参数类型,不同的参数个数,不同的参数顺序. 2.方法的异常类型和数目不会对重载造成影响
方法的覆盖 在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类中的相同,那么,新方法被称做覆盖旧方法. 参数列表又叫参数签名,包括参数的类型.参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同. 被覆盖的方法在子类中只能通过super调用. 注意:覆盖不会删除父类中的方法,而是对子类的实例隐藏,暂时不使用. 请看下面的例子: public c
在PHP中不能定义重名的函数,也包括不能再同一个类中定义重名的方法,所以也就没有方法重载.单在子类中可以定义和父类重名的方法,因为父类的方法已经在子类中存在,这样在子类中就可以把从父类中继承过来的方法重写. 子类中重载父类的方法就是在子类中覆盖从父类中继承过来的方法,父类中的方法被子类继承过来不就可以直接使用吗?为什么还要重载呢?因为有一些情况我们必须要覆盖的.例如,有一个"鸟"类,在这个类中定义了鸟的通用方法"飞翔".将"鸵鸟"类作为它的子类,
-
java子类调用父类变量值_java子类如何调用父类变量和方法
2021-02-13 02:21:02////子类直接调用父类的public方法,可以把公用类放到父类中,这样子类中无需再定义一遍, testSon.fun3(); } // 从结果中可以看出:调用某个类的构造方法的时候总是会先执行父类的非静态代码块,然后执行父类的构造... -
JAVA子类调用父类构造方法
2019-09-27 14:21:28子类调用父类的构造方法 父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。 public class MyException extends Exception{} // MyException类只有一个隐含的默认构造... -
java子类调用父类的方法
2021-03-22 17:40:41当一个类继承于另一个类,子类中没有父类的方法时,用子类的对象调用方法时,会首先在子类中查找,如果子类中没有该方法,再到父类中查找。 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性。 如果该... -
Java子类调用父类构造方法
2017-09-29 14:49:15在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的? 答案如下: 当你new一个子类对象的时候,必须首先要new一个父类... -
Java子类调用父类的构造方法
2020-05-20 20:44:47一、自动调用父类无参构造方法 //这是父类 public class SuperClass { //父类无参构造方法 public SuperClass(){ System.out.println("父类无参构造方法"); } //父类带参构造方法 public SuperClass(String ... -
java子类调用抽象父类方法_【坑】Spring中抽象父类属性注入,子类调用父类方法使用父类注入属性...
2021-03-15 03:44:55运行环境idea 2017.1.1spring 3.2.9.RELEASE需求背景需要实现一个功能,该功能有2个场景A、B,大同小异抽象一个抽象基类Base,实现了基本相同的方法BaseMethod,其中使用到Bean类中的方法A、B分别继承Base,重写Base... -
Java中关于子类覆盖父类的抛出异常问题,java子类调用父类
2020-04-16 02:28:47Java中子类覆盖父类方法抛出异常不能比父类多,这个表述不够准确。准确一点的描述为:子类抛出的异常类型不能比父类抛出的异常类型更宽泛。假设父类抛出异常ParentException,另外有两个子类继承自ParentException... -
java继承 子类调用父类方法时的内存如何分配
2016-07-27 04:47:28子类调用父类方法时的内存如何分配,当方法区的子类载入方法时,会不会把父类的方法一同载入进去? -
java 调用父级方法_java子类调用父类的方法中包含子类重写的实例方法
2021-01-17 13:50:55} } # 上面的代码的输出结果是: com.qq.demo.common.Sub # 大致流程是 main 中调用子类的 testSub()方法 -- testSub()方法中调用父类的testParent() 方法 -- testParent() 方法调用test()方法;需要注意的是test()... -
JAVA子类继承父类自动调用父类构造方法问题理解
2020-03-22 11:15:40简单说,如果子类继承父类自己写构造方法中没有显示调用父类有参构造方法,则会先隐式调用父类无参构造方法,若是先显示(super(300))调用了父类有参构造方法,则父类的无参构造方法就不会再被调用。 ... -
java子类调用父类的变量值_(转)java基础:父类与子类之间变量和方法的调用...
2021-02-28 12:14:061)父类构造函数java中当调用某个类的构造方法的时候,系统总会调用父类的非静态初始化块进行初始化,这个调用是隐式的,而且父类的静态初始化代码块总是会被执行,接着调用父类的一个或者多个构造器执行初始化,这个... -
java 子类重写父类方法时默认调用子类方法
2020-04-17 14:11:50子类继承父类,重载了父类方法。面试中经常考到方法的调用,以及构造函数先后顺序。 例子 定义父类,申明方法say() public class TestParent { protected static String name = "parent"; TestParent(){ say(); ... -
Java子类调用父类的构造方法(父类无参数构造方法和父类有参数构造方法)
2019-05-03 22:45:50public class A { public String name;... System.out.println("父类的无参数构造方法"); } public A(String str){ this.name=str; System.out.println("父类的有参数构造方法"); } } ... -
java 子类调用父类内部类_java 如何在子类方法中实例化父类的内部类?
2021-03-22 14:12:19匿名用户1级2012-07-30 回答public interface Interface1 {void method1();}public class Class1 {protected class Class1Inner implements Interface1 {public void method1() {System.out.println("Class1Inner");... -
Java子类调用父类的有参和无参的构造方法
2015-02-07 20:08:261、Java子类自动调用父类的无参构造方法 例1:class Test1{ public Test1(){ System.out.print("1"); } } class Test2 extends Test1{ public Test2(){ System.out.print(" 2"); } } public class Tes -
java子类怎么调用父类的构造方法_java子类怎么调用父类的构造方法
2021-03-01 06:34:04顶java的确有其局限性,但应该不是你所说的这个场景应该是你代码写的有问题那我这个场景应该怎么写呢你这种情况,应该用接口,而不是继承。把要暴露出来的方法定义在接口,别人使用时候就不会出现转型问题了。男孩是... -
Java 子类调用父类构造器与静态代码块
2019-04-22 02:50:54在effective Java中关于继承的讨论,有关于构造器的讨论,结论是你超类(父类)好好设计,不要被继承你的子类增加一些不必要的负担。同样继承的时候也要注意,尤其是重写方法时可能由于勾走爱情造成一些可能始料不及... -
Java子类,父类方法调用时序
2015-10-14 10:34:44初学JAVA时总是搞不懂子类继承父类时方法调用的时序.今天又碰到这个问题打了简单的Log看出了其调用的时序. public class class1 extends class2{ public void class1Method(){ method1(); } @Override public...