• 黑马程序员-面向对象


    ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

    • Java继承

    继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承可以理解为一个对象从另一个对象获取属性的过程。

    如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来的。在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类。

    继承通俗的理解就是新创建一个类如果继承了一个类,那么被继承的就是父类,而自己就是子类了。而这个子类可以可以实现并且调用父类的方法。在java中,所以的类都由java.lang.Object类继承而来。所以Object是所有类的父类。

    通常继承一个类可以通过Extends关键字来申明这个类是否继承自某一个类。主要Exteds只可以继承Public的属性和方法

    /*
     * 创建一个类。
     */
    class Person
    {
    	public int age ;
    	public String name;
    }
    /*
     * 继承一个Person。
     */
    class zhulang extends Person
    {
    	//可以看到这里我们可以调用父类的方法。
    	public zhulang()
    	{
    		this.name = "zhualng";
    		this.age = 12;
    	}
    }	
    

     

    还有一种方法可以是想继承。那么就用implements关键字。这个关键字,

    Implements关键字使用在类继承接口的情况下, 这种情况不能使用关键字extends

    说到接口我们得先学习一个概念就是抽象类

    • 抽象类

    抽象定义:

    1. 抽象就是从多个事物中将共性的,本质的内容抽取出来。
    2. 例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。

    抽象类:  Java中可以定义没有方法体的方法,该方法的具体实现由子类完 成,该方法称为抽象方法,包含抽象方法的类就是抽象类。

    抽象方法的由来:

    1.  多个对象都具备相同的功能,但是功能具体内容有所不同,那么在 抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功 能声明,没有功能主体的方法称为抽象方法。
    2.  例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽 象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节
    3. 抽象就是从多个事物中将共性的,本质的内容抽取出来。 
    4. 例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。

    抽象类的特点

    1. 抽象类和抽象方法必须用abstract关键字来修饰。
    2. 抽象方法只有方法声明,没有方法体,定义在抽象类中。
      /*
       * 抽象类使用
       */
       abstract class absDemo
      {
      	 //声明抽象方法。
      //格式:修饰符abstract 返回值类型 函数名(参数列表) ;
      	public abstract String name();
      	
      }
    3. 抽象类不可以被实例化,也就是不可以用new创建对象。原因如 下:  抽象类是具体事物抽取出来的,本身是不具体的,没有对应的实 例。
    4. 例如:犬科是一个抽象的概念,真正存在的是狼和狗。 而且抽象类即使创建了对象,调用抽象方法也没有意义。
    5. 抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象 方法后才可以创建对象,否则该子类也是抽象类。

      

    说完抽象类。那么我们可以来学习一下接口。

    • Java 接口

    为什么要有接口呢?Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

    说到这里接口是一个抽象类。那么我么就会有问题,什么是抽象类呢?

    接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

    除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

    接口与类相似点:

    • 一个接口可以有多个方法。
    • 接口文件保存在.java结尾的文件中,文件名使用接口名。
    • 接口的字节码文件保存在.class结尾的文件中。
    • 接口相应的字节码文件必须在与包名称相匹配的目录结构中。

    接口与类的区别:

    • 接口不能用于实例化对象。
    • 接口没有构造方法。
    • 接口中所有的方法必须是抽象方法。
    • 接口不能包含成员变量,除了static和final变量。
    • 接口不是被类继承了,而是要被类实现。
    • 接口支持多重继承。

    接口有以下特性:

    • 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
    • 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键子。
    • 接口中的方法都是公有的。

    接口的声明和实现

    当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。

    类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。

    	public interface Imytefact
    	{
    		//任何类型 final, static 字段
    		final String name="xuexi";
    		static int Age =13;
    		
    		  //抽象方法
    		 public void Show();
    	}
    	//实现上面的接口
    	public class instr implements Imytefact
    	{
    		//必须实现接口里买的所有方法。
    		public void Show()
    		{
    			//调用接口里面的静态字段。
    			System.out.println(this.name);
    		}
    		
    	}
    

      

    重写接口中声明的方法时,需要注意以下规则:

    • 类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
    • 类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
    • 如果实现接口的类是抽象类,那么就没必要实现该接口的方法。

    在实现接口的时候,也要注意一些规则:

    • 一个类可以同时实现多个接口。
    • 一个类只能继承一个类,但是能实现多个接口。
    • 一个接口能继承另一个接口,这和类之间的继承比较相似。
    • Java 重写(Override)与重载(Overload)

    函数覆盖(Override)

    1. 子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重 写或者复写。
    2. 父类中的私有方法不可以被覆盖。
    3. 在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名 获取。
    4. 覆盖注意事项: • 覆盖时,子类方法权限一定要大于等于父类方法权限 • 静态只能覆盖静态。
    5. 覆盖的应用: • 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写 父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内 容

    函数覆盖的展示

    //对象的重载
    	
    	public class Animal
    	{
    		public void move()
    		{
    			System.out.println("Animal可以移动");
    		}
    	}
    	
    	//重写父类的方法
    	public class Mat extends Animal
    	{
    		//重写父类的方法
    		public void move()
    		{
    			//调用父类的move()方法。
    			super.move();
    			//自己的move()方法
    			System.out.println("Mat自己的移动方法");
    		}
    	}
    	
    	public static void main(String[] args)
    	{
    		Mat mat = new Mat();
    		mat.move();
    	}
    

    重载(Overload)

    重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。

    每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

    重载规则

    • 被重载的方法必须改变参数列表;
    • 被重载的方法可以改变返回类型;
    • 被重载的方法可以改变访问修饰符;
    • 被重载的方法可以声明新的或更广的检查异常;
    • 方法能够在同一个类中或者在一个子类中被重载。

    具体的代码练习我就不展示了。

    public class Overloading {
     
    	public int test(){
    		System.out.println("test1");
    		return 1;
    	}
     
    	public void test(int a){
    		System.out.println("test2");
    	}	
     
    	//以下两个参数类型顺序不同
    	public String test(int a,String s){
    		System.out.println("test3");
    		return "returntest3";
    	}	
     
    	public String test(String s,int a){
    		System.out.println("test4");
    		return "returntest4";
    	}	
     
    	public static void main(String[] args){
    		Overloading o = new Overloading();
    		System.out.println(o.test());
    		o.test(1);
    		System.out.println(o.test(1,"test3"));
    		System.out.println(o.test("test4",1));
    	}
    

      

    结语:面向对象就这样看完了。觉得毕老师的课程说得还是不错的。只能说我们想的学习和实践能力有限。没有足够的了解。现在只能了解个一二。希望以后能够好好理解面向对象的真正强大之处。

  • 相关阅读:
    File 类
    RocketMQ4.X 集群
    Java 的基本网络支持
    SpringBoot2.X 整合 RocketMQ4.X
    RocketMQ系列:rocketmq运维控制台使用详解(全网独家)
    RocketMQ系列:docker搭建rocketmq单机环境
    RocketMQ系列:rocketmq运维控制台搭建
    RocketMQ系列:单机快速搭建单broker环境
    Jenkins:Git拉取代码版本不对
    pip3:no acceptable C compiler found in $PATH
  • 原文地址:https://www.cnblogs.com/ganwei/p/4576860.html
Copyright © 2020-2023  润新知