Java中抽象类与抽象方法:父类提供定义,子类具体实现

摘要和抽象类简介

Java中抽象类与抽象方法:父类提供定义,子类具体实现

父类中的方法由其子类重写,子类的实现是不同的。然后,父权制方法声明和方法主题仅是有意义的,该方法的主体没有存在的含义(因为子类对象将调用重写本身的方法)。换句话说,父类可能知道哪些功能应该具有哪些功能,但是如何实现父类还不清楚(由子类本身确定)。将其交给Zixu自己实施。我们称之为无用的方法抽象方法。 Java语法规定了抽象方法类别是抽象类。

抽象使用格式

摘要是摘要,用于修改方法和类。修改方法是抽象方法,修改类是抽象类。

抽象方法和抽象类

使用“摘要”关键字修改方法,此方法成为一种抽象方法。抽象方法仅包含一个方法名称,但没有方法。

修饰符 abstract 返回值类型 方法名 (参数列表);
public abstract void run();

如果类包含抽象方法,则该类必须是抽象类。注意:抽象类不一定具有抽象方法,但是具有抽象方法的类必须定义为抽象类。

abstract class 类名字 { 
  
}
public abstract class Animal {
    public abstract void run();
}

抽象使用

要求:抽象子类的继承必须重写父类的所有抽象方法。否则,子类也必须称为抽象类。

// 父类,抽象类
abstract class Employee {
	private String id;
	private String name;
	private double salary;
	
	public Employee() {
	}
	
	public Employee(String id, String name, double salary) {
		this.id = id;
		this.name = name;
		this.salary = salary;
	}
	
	// 抽象方法
	// 抽象方法必须要放在抽象类中
	abstract public void work();
}
// 定义一个子类继承抽象类
class Manager extends Employee {
	public Manager() {
	}
	public Manager(String id, String name, double salary) {
		super(id, name, salary);
	}
	// 2.重写父类的抽象方法
	@Override
	public void work() {
		System.out.println("管理其他人");
	}
}
// 定义一个子类继承抽象类
class Cook extends Employee {
	public Cook() {
	}
	public Cook(String id, String name, double salary) {
		super(id, name, salary);
	}
	@Override
	public void work() {
		System.out.println("厨师炒菜多加点盐...");
	}
}
// 测试类
public class Demo10 {
	public static void main(String[] args) {
		// 创建抽象类,抽象类不能创建对象
		// 假设抽象类让我们创建对象,里面的抽象方法没有方法体,无法执行.所以不让我们创建对象
//		Employee e = new Employee();
//		e.work();
		
		// 3.创建子类
		Manager m = new Manager();
		m.work();
		
		Cook c = new Cook("ap002", "库克", 1);
		c.work();
	}
}

抽象类的特征

可以说抽象类的特征是丢失和丢失

目的:抽象类具有具有抽象方法的能力。

丢失:抽象类失去了创建对象的能力。

其他成员(建设性方法,实例方法,静态方法等)都可以使用抽象类。

抽象细节

1。抽象类无法创建对象。如果创建它们,则无法通过错误。它只能创建其非抽吸分类的对象。

2。在抽象类中,可以有一种建设性方法。当它是子类的目标时,最初使用父类成员。

3。在抽象类中,没有抽象方法,但是带有抽象方法的类必须是抽象类别。

4。抽象子类必须在抽象父类中重写所有抽象方法,否则子类也必须定义为抽象类,并且不能传递汇编并报告错误。

5。抽象类的含义应由子类继承。

抽象类别的含义存在

抽象类的含义应由子类继承,否则抽象类将毫无意义。抽象类可以迫使子类,并且必须根据规定的格式重写。

概述

该界面是一个更彻底的抽象。在包括JDK7在内的JDK7之前,接口都是抽象方法。接口也无法创建对象。

格式如下:

//接口的定义格式:
interface 接口名称{
    // 抽象方法
}
// 接口的声明:interface
// 接口名称:首字母大写,满足“驼峰模式”

抽象方法

接口成分的功能:接口仅包含界面中的抽象方法和常数

接口成分:

注意:接口中的抽象方法将自动添加公共抽象修改程序员以自动添加它!路口

根据规格:建议界面中的摘要方法不编写公共摘要。因为没有必要,因此默认情况下会添加。

持续的:

接口中定义的成员变量将添加:公共静态最终修改。换句话说,接口中定义的成员变量实际上是一个常数。这是使用公共静态最终修改,不能修改变量值,并且可以使用接口名称直接访问静态变量,因此也称为常数。必须给出常数的初始值。持续的命名规格推荐的字母全部大写,并且多个单词通过底线连接。

案例示范

public interface InterF {
    // 抽象方法!
    //    public abstract void run();
    void run();
    //    public abstract String getName();
    String getName();
    //    public abstract int add(int a , int b);
    int add(int a , int b);
    // 它的最终写法是:
    // public static final int AGE = 12 ;
    int AGE  = 12; //常量
    String SCHOOL_NAME = "黑马程序员";
}

基本实现

类和界面之间的关系是实现这种关系,即类实现界面。该类可以称为接口的实现类或接口的子类。实现的实现类似于继承,格式相似,但是关键字不同,并且``insterments''的关键字。

/**接口的实现:
    在Java中接口是被实现的,实现接口的类称为实现类。
    实现类的格式:*/
class 类名 implements 接口1,接口2,接口3...{
}

从上述格式可以看出,可以实现界面。

集体实施接口要求和意义

1。所有抽象方法必须重写所有实现的接口。

2。如果一个类实现接口,但是没有重写接口的整个部分的抽象方法,则此类也必须定义为抽象类。

3。意义:界面反映了规范。接口是实现类的强制性约束。要么完成接口语句的功能,要么也将其定义为抽象类。这是强制性的规范。

/**
   接口:接口体现的是规范。
 * */
public interface SportMan {
    void run(); // 抽象方法,跑步。
    void law(); // 抽象方法,遵守法律。
    String compittion(String project);  // 抽象方法,比赛。
}
public class PingPongMan  implements SportMan {
    @Override
    public void run() {
        System.out.println("乒乓球运动员稍微跑一下!!");
    }
    @Override
    public void law() {
        System.out.println("乒乓球运动员守法!");
    }
    @Override
    public String compittion(String project) {
        return "参加"+project+"得金牌!";
    }
}
public class TestMain {
    public static void main(String[] args) {
        // 创建实现类对象。
        PingPongMan zjk = new PingPongMan();
        zjk.run();
        zjk.law();
        System.out.println(zjk.compittion("全球乒乓球比赛"));
    }
}

班级和接口的多个实施案例

类和接口之间的关系更加实现,一个类可以同时获得多个接口。

//首先我们先定义两个接口,代码如下:
public interface Law {
    void rule();
}
public interface SportMan {
    void run();
}
public class JumpMan implements Law ,SportMan {
    @Override
    public void rule() {
        System.out.println("尊长守法");
    }
    @Override
    public void run() {
        System.out.println("训练跑步!");
    }
}

界面和接口的更多继承

在Java中,接口和接口之间可能有更多的继承:也就是说,一个接口可以同时继承多个接口。每个人都必须注意:

类和界面是真实的关系

界面和接口是继承关系

接口继承接口是将其他接口的抽象方法与此接口合并。

public interface Abc {
    void go();
    void test();
}
/** 法律规范:接口*/
public interface Law {
    void rule();
    void test();
}
 *
 *  总结:
 *     接口与类之间是多实现的。
 *     接口与接口之间是多继承的。
 * */
public interface SportMan extends Law , Abc {
    void run();
}

界面的详细信息

1。当两个接口中有相同的抽象方法时该怎么办?

>只需写一次即可。此时重写的方法不仅显示重写1个接口,还显示重写2个接口。

2。当实现类可以继承A类时,同时其他接口又如何呢?

>继承的父亲班就像爸爸

>实施界面就像是教父

>它可以继承类,然后实现多个接口,但是必须实现接口中的所有抽象方法。

3。类可以同时实现其他接口,可以继承抽象类吗?

>实现类可以继承一个抽象类,然后实现多个接口,但是其中所有抽象方法必须重写。

4。实现Zi,实现接口并继承FU类。假设接口中有一种方法,则父类中有相同的方法。如何操作子类?

>处理方法1:如果父类中的方法可以满足当前的业务需求,则无需在子类别中重写。

>处理方法2:如果父类中的方法无法满足当前业务的需求,则需要将其重写在子类中。

5。如果接口中有10种抽象方法,但是在实现类中,我只需要使用其中一种即可。我应该怎么办?

>在接口和实现类的中间,创建一个新的中级类(适配器类)

>让该适配器类实现以实现接口,并尽快重写接口中的所有方法。

>让子类继承此适配器类,哪种方法可以重写。

>由于中级阶层没有任何实际意义,因此通常将其定义为中产阶级的抽象,因此不允许外界从外界创建对象

内部类别概述

在另一类B中定义一个A类A类。a内部称为内部类,B称为外部类。内部阶级可以理解为寄生,外部阶级可以理解为宿主。

您什么时候使用内部课程?

一件事情里面有一个独立的事情。内部事物不能独立使用外部

内部班级的分类

1。内部类,类是在成员位置定义的(该方法称为类的成员位置,并且没有通过静态修改的内部类)

2。静态内部类,类是在成员位置定义的(该方法称为类的成员位置,并且有一个静态修改的内部类)

3。当地内部类,方法中的类定义

4。匿名内部类,没有名称的内部类,可以在方法中或外部方法之外。

匿名内部类[关键点]概述

匿名内部类:这是内部类的简化写作。他是一个内部班级,暗示他的名字。在开发中,最常用的内部类是匿名内部类。

new 类名或者接口名() {
     重写方法;
};

包括:

继承或实施

方法重写

创意对象

因此,就语法而言,这实际上是一个匿名的内部类对象

我什么时候使用匿名内部课程?

实际上,如果我们要定义仅使用一次的类,则可以考虑使用匿名内部类。匿名内部类的基本效果是简化代码。

当我们以前使用界面时,我们似乎会执行以下步骤:

1。定义子类

2。在接口中重写该方法

3。创建一个子类对象

4。调用重写方法

interface Swim {
    public abstract void swimming();
}
// 1. 定义接口的实现类
class Student implements Swim {
    // 2. 重写抽象方法
    @Override
    public void swimming() {
        System.out.println("狗刨式...");
    }
}
public class Test {
    public static void main(String[] args) {
        // 3. 创建实现类对象
        Student s = new Student();
        // 4. 调用方法
        s.swimming();
    }
}

匿名内部类和格式

先决条件:匿名内部类必须继承父类或实现父界面。

格式:

new 父类名或者接口名(){
    // 方法重写
    @Override 
    public void method() {
        // 执行语句
    }
};

如何使用

interface Swim {
    public abstract void swimming();
}
public class Demo07 {
    public static void main(String[] args) {
        // 使用匿名内部类
		new Swim() {
			@Override
			public void swimming() {
				System.out.println("自由泳...");
			}
		}.swimming();
        // 接口 变量 = new 实现类(); // 多态,走子类的重写方法
        Swim s2 = new Swim() {
            @Override
            public void swimming() {
                System.out.println("蛙泳...");
            }
        };
        s2.swimming();
        s2.swimming();
    }
}

结果如下:

匿名内部类的功能

1。定义一个没有名称的内部类

2。此类实现父类或父界面

3。匿名内部类将创建这个没有名称的课程

使用匿名内部类的方案

当该方法的形式参数是接口或抽象类时,匿名内部类也可以作为参数传递。

interface Swim {
    public abstract void swimming();
}
public class Demo07 {
    public static void main(String[] args) {
        // 普通方式传入对象
        // 创建实现类对象
        Student s = new Student();
        
        goSwimming(s);
        // 匿名内部类使用场景:作为方法参数传递
        Swim s3 = new Swim() {
            @Override
            public void swimming() {
                System.out.println("蝶泳...");
            }
        };
        // 传入匿名内部类
        goSwimming(s3);
        // 完美方案: 一步到位
        goSwimming(new Swim() {
            public void swimming() {
                System.out.println("大学生, 蛙泳...");
            }
        });
        goSwimming(new Swim() {
            public void swimming() {
                System.out.println("小学生, 自由泳...");
            }
        });
    }
    // 定义一个方法,模拟请一些人去游泳
    public static void goSwimming(Swim s) {
        s.swimming();
    }
}

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

28阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

26阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

26阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

26阅读