`
LQJ2711
  • 浏览: 5041 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

类的继承以及抽象类和接口的概念

阅读更多

继续上次类的内容继续写。

这次主要说的是类的继承、抽象类以及接口的概念。

一、类的继承

     1.概念

        Java里类的继承主要是通过关键字extends来写的。继承后,子类(儿子)将继承父类(父亲)的成员属性和成员方法。

     2.格式

        public class 父类名{}

        public class 子类名 extends 父类名{}

     3.作用

        1)反映现实中类与类的真实关系

        2)子类继承父类的属性和方法,减少代码的冗余

        3)子类可以在父类的基础上增加新的方法以及修改继承来的方法

             注意:子类可以在父类的基础上,定义自己特有的 属性和方法【扩展】。但是子类特有的属性和方法必须是子类类型的对象才能调用

     4.类型的转换

        类类型的转换和数据的类型装换是一样的,可以是自动装换,也可以是强制转换

       自动转换必须是从小往大装换;强制装换则是从大往小装换

       自动转换:子类对象的类型自动转换成父类类型

       强制转换:父类类型的对象必须强制转换才能转换成子类类型

     5.方法的重写和重载

        重写:在同一个类中,有多个同名不同参数列表【参数的类型、个数或者顺序】,且方法体必须不同的方法

        重载:在子类重新定义一个和父类同方法名、同参数、同返回值且方法体不同的方法

     6.注意事项

        构造方法不能被继承,只能被调用

        在子类子类的构造方法中必须调用父类的一个构造方法,一般没写的话就默认调用的是父类的无参构造方法

        如果父类存在构造方法的重载,那么父类默认的无参构造方法就会失效,解决方法是直接写出来。

        

       Java中是单根继承,每个类只有一个父类,除了最高层次的根类:Object类。其他所有的类都是Object类的子类,包括数组

 

      7.多态

          概念:同一个类型的对象执行相同的行为,得到的结果可能不一样

          表现形式:

  1、重写多态:[动态多态]由于继承和重写机制,相同类型的对象,调用相同的方法,得到的结果可能出现多种情况

  2、重载多态:[静态多态]由于重载机制,可以导致的多态

 

/**
 * 汽车类Auto类
 * @author LiuQingjian
 *
 */
public class Auto {
	//轮胎个数
	public int lt;
	//汽车颜色
	public String color;
	//汽车重量
	public double wei;
	//汽车的速度
	public double v;

	/**
	 * 构造方法初始值
	 */
	public Auto() {
		lt = 0;
		color = "白色";
		wei = 0;
		v = 0;
	}
	/**
	 * 重载构造方法初始值
	 */
	public Auto(int t) {
		lt = t;
		color = "白色";
		wei = 0;
		v = 0;
	}
	/**
	 * 重载构造方法初始值
	 */
	public Auto(int t, String s) {
		lt = t;
		color = s;
		wei = 0;
		v = 0;
	}
	/**
	 * 重载构造方法初始值
	 */
	public Auto(int t, String s, double p) {
		lt = t;
		color = s;
		wei = p;
		v = 0;
	}
	/**
	 * 重载构造方法初始值
	 */
	public Auto(int t, String s, double p, double a) {
		lt = t;
		color = s;
		wei = p;
		v = a;
	}
	/**
	 * 加速方法
	 * @param t 加速的速度
	 */
	public void js(int t) {
		System.out.print(v);
		v += t;
		System.out.println("加速成了" + v);
	}
	/**
	 * 减速方法
	 * @param t 减速的速度
	 */
	public void js1(int t) {
		System.out.print(v);
		v += t;
		System.out.println("减速成了" + v);
	}
	/**
	 * 停车的方法
	 */
	public void stop() {
		v = 0;
		System.out.println("已停车");
	}
	/**
	 * 输出汽车此时的状态
	 */
	public void setter() {
		System.out.println("该车有" + lt + "个轮子");
		System.out.println("该车的颜色是:" + color);
		System.out.println("该车重" + wei + "吨");
		System.out.println("该车此时速度:" + v + "km/s");
	}
}
/**
 * 汽车配置类Car类
 * @author LiuQingjian
 *
 */
public class Car extends Auto {
	//空调
	public String kt;
	//CD
	public String cd;
	/**
	 * 构造方法,初始值
	 * @param t 轮胎个数
	 * @param s 汽车颜色 
	 * @param p 汽车重量
	 * @param c 汽车速度
	 * @param a 汽车内的空调
	 * @param b 汽车内的CD
	 */
	public Car(String a, String b) {
		super(4, "绿色", 30, 6);
		kt = a;
		cd = b;
	}
	/**
	 * 重写加速方法
	 */
	public void js(int t) {
		v += t;
		System.out.println("v已加速:" + v + "km/s");
	}
	/**
	 * 重写减速方法
	 */
	public void js1(int t) {
		v -= t;
		System.out.println("v已减速:" + v + "km/s");
	}
	/**
	 * 输出此时汽车的状态与配置
	 */
	public void setter() {
		System.out.println("该车有" + lt + "个轮子");
		System.out.println("该车的颜色是:" + color);
		System.out.println("该车重" + wei + "吨");
		System.out.println("该车此时速度:" + v + "km/s");
		System.out.println("该车装有" + kt);
		System.out.println("该车上有" + cd);
	}
}
/**
 * 主类
 * @author LiuQingjian
 *
 */
public class de {
	public static void main(String[] args) {
		Auto ca = new Auto();
		Auto ca1 = new Auto(4);
		Auto ca2 = new Auto(4, "黑色");
		Auto ca3 = new Auto(4, "灰色", 20);
		//创建汽车
		Auto ca4 = new Auto(4, "绿色", 30, 6);

		ca4.stop();
		ca4.js(4);
		ca4.js1(1);
		ca4.setter();

		//创建新的有配置的汽车
		Auto ca5 = new Car("美的空调", "歌唱CD");
		ca5.setter();
		ca5.js(5);
		ca5.js1(3);
		ca5.setter();
	}
}

 

 

 

 二、抽象类

       1.类的特点:

          类中的方法必须全部是具体的方法[有方法体的方法],类中的方法可以是成员方法,也可以是类方法

          类中的属性可以是成员属性,也可以是类属性

          类中至少有一个构造方法,可以调用构造方法来创建对象,默认的是无参构造方法

 

        2.[虚类]抽象类的关键字  abstract class

           1)抽象类的定义格式

                public abstract class A{

                   private String name;

                   private static String age;

 

                   public void a(){

                   }

 

                   public abstract void b();

                   public abstract void b(String s);

                }

 

        3.抽象类的特点

            抽象类中的方法可以是具体的方法,也可以是抽象方法[没有方法体的方法]

            抽象类中的属性可以是成员属性,也可以是类属性

            抽象类中的方法需要且必须定义访问限定符

            抽象类中至少有一个构造方法,但是不能调用构造方法来创建对象

            作用:抽象类就是用来充当父类,给子类去继承扩展和完善的

 

        4.抽象类的继承

            格式:public class [类名]B extends [类名]A{}

            继承抽象类必须要重写抽象类中的所有抽象方法

 

/**
 * 抽象类Vehicle类
 * @author LiuQingjian
 *
 */
public abstract class Vehicle {
	public abstract String NoOfWheels();
}
/**
 * 扩展抽象类的Motorbike类
 * @author LiuQingjian
 *
 */
public class Motorbike extends Vehicle {
	public String NoOfWheels(){
		System.out.println("一个双轮车");
		return "双轮车";
	}
}
/**
 * 扩展抽象类的Car类
 * @author LiuQingjian
 *
 */
public class Car extends Vehicle {
	public String NoOfWheels(){
		System.out.println("一个四轮车");
		return "四轮车";
	}
}
/**
 * 主类
 * @author LiuQingjian
 *
 */
public class de {
	public static void main(String[] args) {
		Car a = new Car();
		Motorbike b = new Motorbike();
		System.out.println(a.NoOfWheels());
		System.out.println(b.NoOfWheels());
	}
}

 

三、接口

      1.[纯虚类]接口的关键字  interface

          接口的定义

          public interface 接口名{}

 

       2.接口的特点:

          接口中的方法必须全部是抽象方法,默认就是public abstract,必须是public abstract,可以省略

          接口中的属性必须是常量,默认就是public static final,必须是public static final

          接口中没有构造方法,不能创建对象

          作用:接口是用来充当父类,给子类去扩展和完善的

 

       3.接口的实现

           public interface [接口名]A{}

           public class [接口名]B implements [接口名]A{}

          必须定义一个子类实现这个接口,并且要重写[实现]接口中的所有抽象方法

 

 

/**
 * 接口Vehicle
 * @author LiuQingjian
 *
 */
public interface Vehicle {
	/**
	 * 抽象方法
	 * @param t 输出值
	 */
	public abstract void start(int t);
	/**
	 * 抽象方法
	 * @param t 输出值
	 */
	public abstract void stop(int t);
}

/**
 * 实现接口,完善抽象类类
 * @author LiuQingjian
 *
 */
public class Bus implements Vehicle{
	/**
	 * 输出传来的值
	 */
	public void start(int t){
		System.out.println("t="+t);
	}
	/**
	 * 输出传来的值	
	 */
	public void stop(int t){
		System.out.println("t="+t);
	}
}

/**
 * 实现接口,完善抽象类Bike类
 * @author LiuQingjian
 *
 */
public class Bike implements Vehicle{
	/**
	 * 输出传来的值
	 */
	public void start(int t){
		System.out.println("t:"+t);
	}
	/**
	 * 输出传来的值
	 */
	public void stop(int t){
		System.out.println("t:"+t);
	}
}

/**
 * 主类
 * @author LiuQingjian
 *
 */
public class interfaceDemo {
	public static void main(String[] args) {
		Bike a = new Bike();
		Bus b = new Bus();
		a.start(10);
		a.stop(1);
		b.start(9);
		b.stop(2);
	}
}

 

 

扩展:

        1.常量的定义:public static final 数据类型 变量名 = 值;    

        2.不管是继承类,还是抽象类,还是接口,如果子类要重写父类的方法,都不能够减小方法的访问限定范围

            public   protected   默认不写   private          范围按顺序:大->小

        3.如果是抽象类继承抽象类,可以不用重写继承到的方法。

           抽象类实现接口,可以不用重写接口中的方法。

           原因:抽象类允许抽象方法存在。

        4.接口可以继承接口,一个接口可以继承多个接口,不能重写继承到的方法

          例: public interface C{}

          public interface D{}

          public interface E extends C,D{}

           附:C、D、E都是接口名

       5.类与类的继承,类与抽象类的继承都是单根继承

     

       6.一个类[抽象类]可以实现多个接口,

  例:public class F implements C,D{}

          附:F是类名,C、D是接口名

 

           一个类[抽象类]可以先继承一个类,再实现多个接口

  例:public class G extends A implements C,D{}

 

         G a1 = new G();

         A a2 = new G();

         C a3 = new G();

         D a4 = new G();

          例:G、A是类名,C、D是接口名

 

分享到:
评论

相关推荐

    抽象类和接口的区别

    抽象类和接口的区别 【概述】 一个软件设计的好坏,我想很大程度上取决于它的整体架构, 而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时, 你底层的具体实现...

    Java抽象类和接口的深度解析.pptx.pptx

    抽象类的基本概念 抽象类是Java中一种特殊的类,它不能被实例化,只能被继承。...抽象类和接口都是用于定义通用属性和方法的,但抽象类可以有构造方法,接口不能有。抽象类只能单继承,接口可以实现多继承。

    实验3 抽象类和接口(2学时)

    掌握Java中抽象类和抽象方法的定义; 掌握Java中接口的定义,熟练掌握接口的定义形式以及接口的实现方法。 二、实验内容 1、按照要求使用Java进行编码。 编写一个抽象类Shape,其中有抽象方法getArea()和...

    dot Net中抽象类与接口的区别

    详细介绍了dot Net中抽象类与接口的... 通过相同与不同的比较,我们只能说接口和抽象类,各有所长,但无优略。在实际的编程实践中,我们要视具体情况来酌情量才,但是以下的经验和积累,或许能给大家一些启示...

    C#接口抽象类区别实例

    c#中抽象类和接口。 相同点: (1) 都可以被继承 (2) 都不能被实例化 (3) 都可以包含方法声明 (4) 派生类必须实现未实现的方法 区 别: (1) 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、...

    Java中抽象类和接口的区别与作用详解

    结论:abstract class和Interface是JAVA语言中的两种定义抽象类的方式。Interface将abstract的概念作了更进一步的发挥。你可以想像Interface是“纯粹”的 abstract class,只可以包含抽象方法,也包括一些常量的定义...

    抽象类、继承、接口(重写重载)练习

    请同学们,合理利用抽象类、继承、接口设计并实现上述功能。体会抽象类与接口种的不同。并且单独使用一个DeomTest作为入口类,要求汽车、飞机都使用交通工具类型的引用变量调用出行方法,表现出多态的特性。

    java:接口和抽象类练习

    抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是...在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。 接口: 接口(英文:

    面向对象程序设计与实践-Java抽象类和接口[33页].pptx

    面向对象程序设计与实践 第五章 Java抽象类和接口 面向对象程序设计与实践课程组 面向对象程序设计与实践-Java抽象类和接口[33页]全文共33页,当前为第1页。 教学目标 教学方式 重点知识 学习目标 1.熟悉抽象类的...

    Java抽象类高难度面试题及解析

    您将了解抽象类与接口的区别、抽象类的实例化、构造函数和成员方法的使用、抽象类与其他类和抽象类的继承关系、抽象类的修饰符和限制规则等。此外,我们还讨论了抽象类与接口的结合应用、抽象类的静态方法和内部类、...

    Java学习笔记---15.面向对象编程10-Java中final关键字,抽象类与接口

    // 一个类可以继承多个接口,但如果该类不是抽象类的话,则必须实现抽象类中的所有抽象方法 class Student implements Person { public void fun() { System.out.println("name = "+NAME); } } public ...

    介绍Java的抽象类和接口的使用.docx

    有这么多类继承Animal类,那Animal类的say()方法这样写合适吗?因为每种动物说话的方式都不同,而动物又是这么宽泛的一个概念,我们通常会new Dog()或new People(),但很少会去new ...这样的Animal类就是 抽象类 。

    Java 面向对象(继承、多态、接口、异常).ppt

    掌握类的继承、方法重写、super关键字的使用、final关键字、抽象类和接口、多态的使用以及异常的处理方式 熟悉面向对象继承和多态的概念

    java抽象类和接口和继承之间关

    有时候,我们可能想要构造一个很抽象的父类对象,它...而水果类又要能被子类化,这就要求我们使用抽象类(abstract class)来解决这个问题。  在java中,通过在class关键字前增加abstract修饰符,就可以将一个类定

    实验四类的继承与多态实验.doc

    实验四 类的继承与多态实验1.理解软件重用性的一种形式——继承。 2.能够通过继承已有的类创建新类。 3.理解基类和派生类的概念...8.理解虚函数、纯虚函数和抽象类概念。 9.掌握用抽象类和多态性实现编程的方法。

    第四讲 继承与多态 ppt

    面向对象的基本概念:继承 继承 抽象类和最终类 接口

    《java面向对象程序设计-继承和多态》教案.doc

    第四章 面向对象的概念和 Java 实现-2 回顾 类是具有相同属性和行为的一组对象的 集合 , 对象是类的实例 封装是隐藏对象实现细节的过程,以便不让用户看到实现的细节 类可用Class 来定义,类的变量和方法可被该类的...

    Python面向对象之接口、抽象类与多态详解

    主要介绍了Python面向对象之接口、抽象类与多态,结合实例形式详细分析了Python面向对象中接口、抽象类及多态的概念、用法及相关操作注意事项,需要的朋友可以参考下

    Java零基础-继承.md

    建议通过阅读相关的Java教材或搜索资料,进一步扩展学习与继承相关的高级主题,如多层继承、抽象类和接口等内容。 如有疑问,可以参考Java官方文档或向技术论坛寻求帮助,进一步加深对继承的理解。

    Java基础 接口.pdf

    6、接口与抽象类有些相似,但也有很大区别,比如接口不能包含构造器、变量和实例方法等。 Java接口的具体作用 1、接口定义了一个规范,类实现这个规范即可满足某些特定的需求。 2、接口可以使代码结构更加清晰,提高...

Global site tag (gtag.js) - Google Analytics