`
百卉含英
  • 浏览: 26831 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

构造方法 方法的重载、重写 继承

阅读更多

    1)构造方法:

        构造方法是方法的一种特殊显示,它有两个特征:1)无返回类型(注意,不是返回类型为void,而是根本就没有返回类型)。2)方法名与类名相同。

        当我们定义一个类的对象时,eg:我们已经有了一个Dog类,当定义一个Dog的对象时,Dog dog = new Dog();在这个语句中,new Dog(),就是创建了一个类的对象,同时也调用了该类的构造方法,(对于构造方法,我们只能用new 关键字调用)。

        当一个类没有构造方法时,那么JVM在执行时会默认添加一个没有参数没有方法体的构造方法。但是一旦当我们自己给出了构造方法后,JVM将不会在提供默认的构造方法。

        对于一个类,可以定义多个构造方法,构造方法之间可以相互调用,但是最多只能调用一个构造方法。

        之所有要用到构造方法,是因为,对于有的类,需要设置多个实例变量的值,引入构造方法,方便了多次设置实例变量。eg:

public class Dog {
	
	private String name;
	private int age;
	private float color;
	
	public Dog(String name,float color){
		this.name = name;
		this.color = color;
	}
		
	public Dog(String name,int age,float color){
		this(name, color);//调用构造方法
		//在构造方法上完成一定的封装
		if(age < 0){
			this.age = 10;
		}else{
			this.age = age;	
		}			
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if(age < 0){
			this.age = 10;
		}else{
			this.age = age;	
		}
	}
	public float getColor() {
		return color;
	}
	public void setColor(float color) {
		this.color = color;
	}
		
}

     在该类中,定义了,两个构造方法,其中第二个构造方法调用了第一个构造方法,区别调用的是哪一个构造方法时,是以该方法的参数列表为依据的。

 

    2)方法的重载和重写:

        方法的重载是指几个方法具有相同的访问修饰符、返回类型,方法名,只是方法的参数列表不同而已(这里的不同指的是参数的数量,顺序和类型),比如上面代码中的两个构造方法就是方法的一种重载。

public class Person {
	public void add(int num1,int num2){
		System.out.println(num1 + num2);
	}
	
	public void add(float num1,float num2){
		System.out.println(num1 + num2);
	}
	
	public void add(int num,int...nums){
		int total = 0;
		for (int i = 0; i < nums.length; i++) {
			total += nums[i];
		}
		System.out.println(total);
	}
}

public class Test {
	public static void main(String[] args) {
		
		Person p = new Person();
		p.add(5,2,2,45);
		p.add(5, 4);
		p.add(8.5f, 7.4f);
         }
}

     在Person类中定义的三个add()方法,相互构成方法的重载,在Test中,通过参数列表的不同,JVM确定调用的是哪一个add()方法。

     从JDK5之后,引入了不定项参数,就是Person类中的第三个add()方法,对于一个方法,其参数列表只能有一个不定项参数,且不定项参数是参数列表中的最后一个参数。对于不定项参数,可以传入一个或多个参数,也可以不传入参数。

 

    3)类的继承:

        被继承的类称为父类(超类/基类),实现继承的类称为子类,子类有父类的属性和方法,也可以在子类中定义自己特有的方法和属性。

        类的继承具有传递性,且是单继承。

 

        继承中的构造,对于一个子类对象的创建,首先会先创建父类对象,即在调用子类构造方法时,先构造父类的构造方法。如果父类的构造方法不是默认的,而是重写的,那么在子类的构造方法的方法体中的第一句应该是调用父类的构造方法,使用super关键字调用。

 

    4)方法的重写:

        子类重写从父类继承过来的方法,在子类中,方法签名(访问修饰符,方法名,参数列表)与父类的相同,不同的仅仅好似方法体,再次,注意与方法的重载的区别。

public class Animal {
	
	private String name;
	private int age;
	
	public Animal(String name){
		System.out.println(name+"我是动物");
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public void eat(){
		System.out.println("吃食物");
	}
}


public class Cat extends Animal {
	
	public Cat(){
		super("nihao");
		System.out.println("我是猫");
	}
	//@Override 用于确认重写的正确性
	public void eat(){
		super.eat();//重写的基础上,调用父类的eat()方法
		System.out.println("猫吃食物");
	}
	
	public void eatFather(){
		super.eat();
	}
}

public class Test {
	public static void main(String[] args) {
		
		/*Cat c = new Cat();//先执行父类的构造方法,再执行子类的构造方法
		c.eat();
		c.eatFather();
        }
}

 执行结果如图:



 在此例中,应注意父类与子类构造方法的参数类型。

 

  • 大小: 8.5 KB
分享到:
评论

相关推荐

    AbstractTest.java帮助理解多重继承、抽象方法重写调用、super、this关键字、构造方法、重载知识点

    定义抽象类以及抽象方法,构造方法,将子类1定义为抽象类,子类2继承子类1,子类2重写抽象方法。用以帮助理解多重继承、抽象方法重写调用、super、this关键字使用、构造方法、重载这几个的知识点

    方法的重载和重写1

    6. 构造方法不能被重写,但可以被子类继承和调用。 在子类中,如果你需要调用父类被重写的方法,可以使用`super`关键字来显式调用。例如: ```java public class ChildClass extends ParentClass { @Override ...

    java中的继承(子类调用父类构造方法还不懂).doc

    Java 中的继承(子类调用父类构造方法还不懂) Java 中的继承是指一个类可以继承另一个类的属性和方法,这样可以实现代码的复用和提高开发效率。在 Java 中,继承使用关键字 `extends` 来实现。 Java 中继承的注意...

    [Java]重载,重写以及继承,多态的区

    子类可以继承父类的所有属性和方法,除了构造方法和final修饰的方法。继承的主要目的是为了代码复用和提高代码的可扩展性。例如: ```java class Shape { public int getSides() { return 0; } } class ...

    第十章 C#继承 派生类 派生类的构造方法.docx

    C#继承和派生类的构造方法 在C#中,继承是面向对象编程的基本概念之一。继承是指一个类可以继承另一个类的成员字段和函数,从而实现代码的复用和扩展。 在C#中,我们可以通过两种方式实现继承,即实现继承和接口...

    Java的重载和重写

    2. 构造方法不能被重写,但可以被覆盖。 3. static方法不能被重写,因为它们不与对象关联,而是与类关联。 4. final方法不能被重写,因为它被声明为不可更改。 5. abstract方法必须在子类中被重写,除非子类也是...

    重载、重写、继承、封装、基本案例掩饰

    在编程领域,特别是面向对象编程(OOP)中,"重载"、"重写"、"继承"和"封装"是四个核心概念。这些概念是构建可扩展、灵活且易于维护的软件系统的关键要素。下面我们将逐一深入探讨这些概念,并通过一个简单的案例来...

    继承与方法的重载学习代码

    通过实践这些示例代码,开发者可以更好地掌握Java中继承和方法重载的概念,从而提高编程效率和代码质量。在2019313LeSSon07_继承这个压缩包文件中,很可能包含了上述概念的实例代码,读者可以通过解压并运行这些代码...

    C#_重载重写_隐藏_数组_集合_委托

    - 继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法; - 而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。 4. **继承与实现的区别:** - ...

    重载重写、接口、抽象类、String指针和字符串拼接、异常catch、throw、throws、字符流和字节流

    ### 重载重写 1. **方法重载(Overloading)**:在同一类中,方法名相同但参数列表不同(参数个数、类型或者顺序不同)的方法称为重载方法。重载是在同一个类中实现的,它提高了代码的可读性和复用性。 2. **方法...

    java继承与多态PPT教案学习.pptx

    如果子类自己定义了构造方法,则在创建新对象时,它将先执行继承自父类的无参数构造方法,然后再执行自己的构造方法。 3. 父类的含参数构造方法,子类可以通过在自己构造方法中使用super关键字来调用,但这个调用...

    Java 重载、重写、构造函数的实例详解

    重写发生在继承关系中,当子类继承父类并需要修改或扩展父类的行为时,可以在子类中定义一个与父类同名且参数列表完全相同的方法,这就是重写。重写的方法必须遵循以下规则: 1. 重写的方法不能有更严格的访问权限。...

    Java继承习题

    ### Java继承习题知识点解析 #### 一、基础概念与选择...通过以上解析,我们对Java中的继承、方法重载、访问控制等概念有了更深入的理解。这些知识点是Java编程中的基础知识,对于理解和编写复杂的Java程序至关重要。

    Java重写.docx

    Java中的重写(Override)和重载(Overload)是两个重要的概念,它们都是指方法的定义方式,但是它们之间存在着明显的区别。 方法的重载 在同一个类中,可以定义多个方法,它们的方法名相同,但是参数列表不同,...

    Java 重载、重写、构造函数详解

    当一个类继承它的父类方法时,都有机会重写该父类的方法。一个特例是父类的方法被标识为final。重写的主要优点是能够定义某个子类型特有的行为。  class Animal {  public void eat(){  System.out.println ...

    封装、继承、多态.docx

    多态可以分为两种形式:方法重载和方法重写。 1. 方法重载:是指多个方法具有相同的方法名,但不同的参数列表。 2. 方法重写:是指子类对父类的方法进行重写,以实现不同的行为。 LSP(里氏代换原则): 1. 子类...

    day13-面向对象-继承&amp;包和访问权限

    通过以上知识点的学习,我们可以更好地理解和运用Java中的面向对象特性,如继承、方法重写、重载和访问权限控制,从而提高代码的可维护性和复用性。这些基础知识对于理解更复杂的Java编程概念和设计模式至关重要。

    Java方法覆盖重写实现原理解析

    * 子类可以通过super(...)来调用父类的重载构造方法 * super调用父类的构造方法,必须是子类构造方法的第一行语句 5. this关键字的使用 this关键字用于访问本类的其他构造方法,注意以下几点: * 在构造方法中...

    java学习笔记 继承 重载 覆盖

    方法覆盖(Overriding)则发生在子类中,当子类重写父类的方法时,必须保持方法名、参数列表和返回类型相同,实现不同的逻辑。 总的来说,这些笔记内容涵盖了Java编程的基础和核心概念,为深入学习Java提供了坚实的...

Global site tag (gtag.js) - Google Analytics