第七周动手动脑

一:继承

package 继承;
                  //inherit 继承
public class TestInherits {
	 public static void main(String args[])
	 {

        	Child c = new Child();

  }
}
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.");/*调用父类的构造方法。
                         子类可以调用由父类声明的构造方法,
             但是必须在子类的构造方法中使用super关键字来调用。其具体的语法格式如下: 
        super([参数列表]); */

        	//System.out.println("Parent Created");

        //super("Hello.Grandparent.");

	  }

}

class Child extends Parent
{

    public Child()
	 {

        System.out.println("Child Created");

	  }

}

  

1继承
super关键字主要有两种用途分别为:
1.调用父类的构造方法。子类可以调用由父类声明的构造方法,但是必须在子类的构造方法中使用super关键字来调用。其具体的语法格式如下:?
super([参数列表]);?
如果父类的构造方法中包括参数,则参数列表为必选项,用于指定父类构造方法的入口参数。?
2.操作被隐藏的成员变量和被覆盖的成员方法。如果想在子类中操作父类中被隐藏的成员变量和被覆盖的成员方法,也可以使用super关键字,具体格式如下:
super.成员变量名?super.成员方法名([参数列表])
通过super调用基类构造方法,必须是子类构造方法中的第一个语句
子类运行前必须调用父类的构造方法
答:构造函数(constructor)是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。
特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造函数的功能主要用于在类的对象创建时定义初始化的状态。
构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。
子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。
不能反过来调用也是这个原因,因为父类根本不知道子类有神魔变量而且这样一来子类也得不到初始化的父类变量,导致程序运行出错!

方法覆盖要点:

二:多态

行为(方法)多态:重写和重载。
引用多态(动态绑定):编译时的类型和运行不一致的现象叫动态绑定
例:父类 = 子类。
Pet p = new Dog();
12.instanceof
语法:对象A instanceof 类型B
判断对象A的类型是否是类型B,如果是就返回true,否则返回false.
例:d instanceof Dog
13.实现多态的两种形式
a.使用父类作为方法形参实现多态
public void play(Pet p){...};
b.使用父类作为方法返回值实现多态
public Pet getPet(int type){...};
14.接口
14.1语法
publicinterface 接口名 extends 接口1,接口1...{
//1.常量
//2.抽象方法
}
14.2特点
a.用interface修饰
b.接口可以继承接口,多继承
c.接口内只能定义常量和抽象方法
d.接口不能实例化,但是可以作为子类的引用
e.实现接口的子类都必须实现它的所有抽象方法
f.规则
14.3实现接口
public class 类名 implements 接口名{
//实现方法
}

三:抽象和接口

在Java中关键字abstract修饰的类称为抽象类,同样abstract修饰的方法称为抽象方法。

抽象类不能使用new方法进行实例化,是没有具体实例对象的类。抽象类不能直接创建对象,只能通过抽象类派生出新的子类,由子类创建对象。抽象类本身不具备实际功能只能用于其派生子类

抽象类的成员方法可以包括一般方法和抽象方法。抽象方法只声明返回的数据类型,方法名称,和所需的参数没有方法体即抽象方法只需要声明不需要实现。当一个方法为抽象方法时就必须被子类方法重写否则子类方法仍是抽象方法。抽象类中不一定包括抽象方法,但包括抽象方法的类一定被声明为抽象类

例如

package ch01;
abstract class ep1_1{//定义抽象类
    String str;
    ep1_1(String s){//定义抽象类一般方法
        str=s;
    }
    abstract void fruit();//定义抽象方法
}
class ep1_2 extends ep1_1{//定义继承抽象类的子类
    String str;
    ep1_2(String s){
        super(s);//调用父类的构造方法
    }
    void fruit(){//重写父类抽象方法
        System.out.println("苹果");
    }
}
 
public class eq1_5 {
    public static void main (String[] args){
        ep1_2 Dx = new ep1_2("水果");//创建子类对象
        Dx.fruit();
    }
 
}

  

运行结果

苹果

接口

接口是抽象类的一种,只包含常量和方法的定义而没有变量和方法的实现且其方法都是抽象方法

接口用处如下

1.通过接口实现不相关类的相同行为,无需考虑这些类之间的关系

2.通过接口指明多个类需要实现的方法

3.通过接口了解对象的交互界面,无须了解对象所对应的类

接口可多重继承



原文地址:https://www.cnblogs.com/1502762920-com/p/9904725.html

时间: 2024-11-04 08:04:11

第七周动手动脑的相关文章

第七周动手动脑(2018.10.29-11.4)

动手动脑1: 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大! 运行截图: 结论:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句. 动手动脑2: 请自行编写代码测试以下特性: 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字. package ceshi; class Animal { pub

第八周动手动脑

动手动脑一: 请阅读并运行AboutException.java示例 AboutException.java 答: 结论: 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除 动手动脑二:多层的异常捕获-1 阅读以下代码(CatchWho.java),写出程序运行结果:  CatchWho 答:运行结果: ArrayIndexOutOfBoundsException/内层try-ca

第五周动手动脑(2018.10.15-10.21)

问题一: 早期经常这样定义变量:int value=100: 前面的这样定义:myclass obj=new myclass(); 这两种方式定义的变量是一样的吗? 答:当声明一个对象类型的变量时,实际上并没有创建一个对象,此变量=null.//myclass obj=new myclass(); 定义一个原始类型的变量时,会马上给其分配内存 //int value=100: 问题二: 对于原始数据类型的变量(比如int),可以直接使用"=="判断两变量值是否相等 对象变量也可以使用&

Java 第五周 动手动脑

一.以下代码为何无法通过编译?哪儿出错了? 原因分析:这是一个常见的构造错误,错误的自己构建了构造方法,导致系统无法正常的进行变量的构造,系统默认的构造方法无法正常运行 二. package demo; public class Test { public static void main(String[] args) { // TODO 自动生成的方法存根 Foo obj1=new Foo(); Foo obj2=new Foo(); System.out.println(obj1==obj2

软工概论第一周动手动脑

一.需要网站系统开发需要掌握的技术 1.java语言 面向对象思想 设计模块和框架思想 xml语言 网页脚本语言 数据库 应用服务器 集成开发环境 二.本次课堂测试的源程序代码 //登录页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3

JAVA第五周 动手动脑

public class Example { int x = 3;//类的实例变量,初始化值为3 static int y = 4;//类的静态变量,初始化值为4 public static void method()//静态方法 { System.out.println("实例变量x = " + new Example().x);//在静态方法中访问类的实例变量需首先进行类的实例化 System.out.println("静态变量y = " + y);//在静态方

第五周动手动脑

1.早期经常这样定义变量:int value=100: 前面的这样定义:myclass obj=new myclass(); 这两种方式定义的变量是一样的吗? 答:当声明一个对象类型的变量时,实际上并没有创建一个对象,此变量=null.//myclass obj=new myclass(); 定义一个原始类型的变量时,会马上给其分配内存 //int value=100: 2.以下代码为何无法通过编译?哪儿出错了? public class Test { public static void ma

第8周动手动脑

1.多层的异常捕获-1 public class CatchWho { public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-

第七讲 数组动手动脑和课后作业

[动手动脑1] 数据作为方法参数示例代码 int[] arr= new int[ 24 ]; -- modifyArray( arr ); 阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. // PassArray.java // Passing arrays and individual array elements to methods public class PassArray { public static void ma