꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ ა
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ---CSDN博客
系列专栏:xiaoxie的Java系列专栏------CSDN博客●'ᴗ'σσணღ*
我的目标:"团团等我💪( ◡̀_◡́ ҂)"
感谢您的阅读!
( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝+关注(互三必回)!
一.抽象类
1.抽象类的定义
Java中的抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类用于定义一些通用的属性和方法,但是这些方法并没有具体的实现,需要子类去实现。抽象类的定义使用关键字abstract来修饰,可以包含抽象方法和非抽象方法。
2.抽象类的语法
public abstract class Animal {
//和普通的类一样可以创建成员变量,静态成员变量
public String name;
private int age;
protected String sex;
public static int a;
//和普通的类一样可以创建成员方法,静态成员方法
public void func1() {
}
public static void func2() {
}
//和普通类不一样的是抽象类还可以创建抽象方法
//抽象方法要在方法的前面加上关键字abstract 并且没有具体的实现
public abstract void func3();
}
- 使用关键字abstract来修饰类,表示这是一个抽象类。
- 抽象类可以包含成员变量、构造方法、抽象方法和非抽象方法。
- 抽象方法的声明以及没有方法体。
- 非抽象方法有具体的实现,可以直接调用。
- 抽象类不能被实例化,只能被继承。
3.抽象类的注意事项
1.抽象类不能被实例化:抽象类不能被直接实例化,因为它包含未实现的抽象方法。只能被用作其他类的父类,子类必须实现抽象方法才能被实例化。
2.子类必须实现抽象方法:如果一个类继承了一个抽象类,它必须实现抽象类中所有的抽象方法,除非子类也声明自己为抽象类。
3.抽象类可以包含非抽象方法:抽象类中可以包含非抽象方法,这些方法有具体的实现。子类可以直接继承这些非抽象方法,也可以选择性地重写它们。
4.抽象类可以包含成员变量和构造方法:与普通类一样,抽象类可以包含成员变量和构造方法。子类可以通过super关键字调用父类的构造方法。
5.抽象类可以被继承:一个抽象类可以被另一个抽象类继承,子类可以继续定义更多的抽象方法,或者实现所有的抽象方法。
4.对抽象类的看法
抽象类是一种不能被实例化的类,它主要用于定义一些共性的属性和方法,以供其子类继承和实现。抽象类本身并不具备完整的实现,而是通过其子类来完善其方法和属性。因此,抽象类可以被看作是一种模板或者规范,用来约束其子类的行为和结构。
抽象类的存在可以帮助程序员更好地进行代码的组织和设计,通过抽象类可以定义出一些通用的行为和属性,减少了代码的重复性,提高了代码的可维护性和扩展性。同时,抽象类也能够在一定程度上约束了子类的行为,使得程序更加健壮和可靠。
总的来说,抽象类是面向对象编程中非常重要的概念,它能够帮助程序员更好地进行代码的组织和设计,提高代码的复用性和可维护性。因此,对于抽象类的使用,程序员需要深入理解其特性和用法,合理地应用到实际的程序设计中。
二.接口
1.接口的定义
接口是指软件系统中不同组件之间互相传递信息的规范和协定。在面向对象编程中,接口用来定义一个类的行为,是类的一种规范化或规范模式。接口中定义了一些方法,但是并不实现,而是由实现该接口的类去实现。
在具体应用中,接口可以描述两个不同的组件之间的交互方式,包括数据格式、协议、参数、返回值等方面的规范。接口可以帮助不同的系统或组件进行互操作,提高软件的可维护性、可扩展性和灵活性。同时,接口的定义还可以帮助开发人员进行模块化的设计和开发,提高代码的复用和可读性。
2.接口的语法
public interface IFly {
//接口也可以创建成员变量
//不过成员变量 默认的形式为 public static final
//并且需要初始化 因为接口不能实例化对像
String name = " ";
//接口可以创建成员方法
//成员方法被 public abstract 修饰 也可以不写,并且没有方法实现
//实现这个接口的类需要重写接口的这个方法
public void work();
//要写具体的方法实现 需要被 public static 所修饰
public static void work1() {
}
}
其中,InterfaceName
是所定义的接口的名称,// 接口成员
指的是在接口中定义的方法和属性。在接口中定义的方法和属性不包含函数体和实现细节,只是提供了一个对实现类的约束,即定义了实现类必须实现哪些方法和属性。
3.接口的注意事项
-
确保接口的命名具有描述性,能够清晰地表达其功能和用途。
-
接口的方法和属性应该按照功能进行分组和命名,以便于理解和使用。
-
接口的设计应该尽量简洁和易于理解,避免过度复杂或冗余的设计。
-
在设计接口时,需要考虑到未来可能的扩展和变化,以便接口能够灵活地适应需求的变化。
-
接口的文档应该清晰地描述每个方法和属性的作用和用法,以便其他开发人员能够正确地使用接口。
-
在实现接口时,需要确保按照接口定义的要求进行实现,以确保接口的一致性和可靠性。
-
接口的版本管理也是一个重要的考虑因素,需要确保接口的变化不会对已有的实现造成影响。
-
在使用接口时,需要遵循接口的规范和约定,以确保接口的正确使用和调用。
4.父类和接口的区别
1.在Java中子类只能继承一个父类,子类却可以实现多个接口
2.抽象类的成员属性和方法和普通类一样 可以创建成员变量和成员方法,而接口的成员属性是被 public stasic final 和 public abstract 所修饰的
5.对接口的看法
接口是一种非常重要的编程概念,它可以帮助开发人员实现代码的模块化和复用,提高代码的可维护性和可扩展性。
接口提供了一种规范化的方式来定义类之间的交互和通信方式,使得不同的类可以通过实现同一个接口来实现相同的功能。这种方式可以大大减少代码的重复和冗余,同时也可以提高代码的可读性和可理解性。
另外,接口还可以帮助开发人员实现代码的解耦和模块化,使得不同的模块之间可以独立开发和测试,从而提高代码的质量和可靠性。同时,接口的使用也可以促进团队合作和代码复用,使得开发效率得到提高。
总之,作为一种重要的编程概念,接口在软件开发中具有非常重要的作用,它可以帮助开发人员实现代码的复用和模块化,提高代码的可维护性和可扩展性,促进团队合作和开发效率的提高。
三.接口和抽象类的结合运用
接口和抽象类都是面向对象编程中的重要概念,它们可以用于实现多态和封装。在某些情况下,将接口和抽象类结合起来使用可以达到更好的效果。
接口和抽象类的区别在于,接口只能定义方法和常量,而抽象类可以定义具体方法和成员变量。因此,可以使用抽象类来实现接口中的某些方法,然后在子类中重写剩余方法。
例如,假设我们有一个图形接口 Shape,其中定义了一个计算面积的方法 getArea()。我们可以将该接口改为抽象类,并提供一个具体方法 getPerimeter() 来计算周长。这样,子类就可以继承抽象类并只需要实现计算面积的方法。
示例代码如下:
public abstract class Shape {
public double getPerimeter() {
return 0;
}
public abstract double getArea();
}
public class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
@Override
public double getPerimeter() {
return 2 * Math.PI * radius;
}
}
public class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
@Override
public double getArea() {
return length * width;
}
@Override
public double getPerimeter() {
return 2 * (length + width);
}
}
在上面的示例中,我们将 Shape 接口改为抽象类,并添加了一个具体方法 getPerimeter()。子类 Circle 和 Rectangle 继承自 Shape,并实现了 getArea() 方法和重写了 getPerimeter() 方法。
通过这种方式,我们可以在抽象类中实现一些通用的方法,同时还能保留接口的灵活性。这种结合运用可以使代码更加简洁和易于扩展。