抽象类与接口学习小结

抽象类:在某些类中某些功能 不能 定义具体的行为功能,这种功能称之为抽象功能,含有抽象功能的类,就称为抽象类。

抽象类的特点:抽象类和抽象方法必须用abstract关键字修饰

       抽象类的格式:   abstract class类名{}

       抽象方法的格式:  public abstract void 方法()

抽象类不一定含有抽象方法,有抽象方法的类一定是抽象类。

抽象类不能实例化,因为该类不是具体的实现类。

抽象类需要按照多态的形式,由具体的子类实例化。

抽象类的子类要么是抽象类,要么必须重写并实现抽象类中的所有方法。

抽象类是有构造方法的,但是不能进行实例化,构造方法的作用是用于子类访问父类数据时进行父类数据的初始化。

抽象方法的访问权限必须是public

抽象类的成员特点:

         成员变量:可以是变量或者常量

         构造方法:有构造方法,但是无法实例化。

         成员方法:可以是抽象方法,也可以是非抽象的成员方法。

                             抽象方法的作用:强制子类做自己的事情

                             非抽象方法:交由子类继承,提高代码的复用性。

抽象可以有静态变量,常量和静态方法。

方法的空实现并不等同于该方法是一个抽象方法。
多态的实现,是为了提高程序的可扩展性。

在软件开发中一般会定义一个空的类作为基类,便于组织和管理代码的体系结构。

软件分析的过程:从具体功能到抽象定义。

软件的实现过程:从抽象定义到具体功能。


抽象类的小问题

1. 抽象类不能用final修饰。抽象方法也不能用final修饰。

2. 抽象方法不能用private修饰。

3. 抽象方法不能用static修饰。


接口:用来表现一些特殊的功能的抽象叙述,交由实现接口的类完成接口中的方法。

接口的特点:

         接口用关键字interface表示

                   格式:interface 接口名{}

 

类实现接口的方式 calss 类名 implements 接口名{}

 

接口的实例化:接口不能直接实例化,需要按照多态的方式,由具体的子类进行实例化。接口也是多态的一种表现形式

 

实现接口的类,要么是抽象类,要么重写并实现了接口中的所有抽象方法。

 

接口中定义的变量默认都是用 public static

接口中定义的方法默认都是用public abstract 修饰的。

接口里面定义的内部类,接口默认都是用public static修饰的

接口可以继承接口。

接口里面可以没有任何成员,从而作为某种标示。

 

接口和抽象类的区别?

接口不能有非抽象方法和 非静态变量。

 

接口的抽象类实现没有实际的意义。

 

多态的三种表现形式:具体类多态  抽象类多态   接口多态



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验报告 一、实验目的 本次实验旨在通过掌握类的封装方法、学习基本的面向对象程序设计方法、掌握继承和多态、抽象类接口等重要技术,提高学生的Java编程能力和面向对象设计思维,从而能够熟练运用Java语言进行面向对象程序设计。 二、实验环境 1. 开发环境:Eclipse 4.9.0 2. Java版本:jdk1.8.0_191 三、实验内容 本次实验主要包括以下内容: 1. 学习类的封装方法,掌握如何定义类和使用public、private、protected等关键字来控制类的访问权限。 2. 学习基本的面向对象程序设计方法,掌握如何定义类的属性和方法,以及如何实例化类对象和调用对象的方法。 3. 掌握继承和多态的基本概念和使用方法,了解子类和父类之间的关系,掌握方法重载和方法覆盖的区别和使用。 4. 学习抽象类接口的基本概念和使用方法,掌握抽象类接口的定义和继承关系,了解抽象类接口的作用和使用场景。 四、实验步骤 1. 定义一个Person类,包括属性name、age和gender,以及方法setName()、setAge()、setGender()和toString(),其中toString()方法用于返回Person对象的字符串表示形式。 ```java public class Person { private String name; private int age; private String gender; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setGender(String gender) { this.gender = gender; } public String toString() { return "Name: " + name + ", Age: " + age + ", Gender: " + gender; } } ``` 2. 定义一个Student类,继承自Person类,包括属性id和score,以及方法setId()、setScore()和toString(),其中toString()方法覆盖了父类的toString()方法,增加了id和score属性的输出。 ```java public class Student extends Person { private String id; private double score; public void setId(String id) { this.id = id; } public void setScore(double score) { this.score = score; } public String toString() { return super.toString() + ", Id: " + id + ", Score: " + score; } } ``` 3. 定义一个Animal接口,包括方法eat()和move()。 ```java public interface Animal { public void eat(); public void move(); } ``` 4. 定义一个Cat类,实现Animal接口,包括属性name和age,以及方法eat()和move(),其中eat()方法输出"Cat is eating",move()方法输出"Cat is moving"。 ```java public class Cat implements Animal { private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void eat() { System.out.println("Cat is eating"); } public void move() { System.out.println("Cat is moving"); } } ``` 五、实验结果 1. 使用Person类创建一个person对象,并设置其属性值,然后调用toString()方法输出结果如下: ```java Person person = new Person(); person.setName("Tom"); person.setAge(20); person.setGender("Male"); System.out.println(person.toString()); ``` 输出结果为: ``` Name: Tom, Age: 20, Gender: Male ``` 2. 使用Student类创建一个student对象,并设置其属性值,然后调用toString()方法输出结果如下: ```java Student student = new Student(); student.setName("Alice"); student.setAge(18); student.setGender("Female"); student.setId("20210001"); student.setScore(90.0); System.out.println(student.toString()); ``` 输出结果为: ``` Name: Alice, Age: 18, Gender: Female, Id: 20210001, Score: 90.0 ``` 3. 使用Cat类创建一个cat对象,并设置其属性值,然后调用eat()和move()方法输出结果如下: ```java Cat cat = new Cat(); cat.setName("Kitty"); cat.setAge(2); cat.eat(); cat.move(); ``` 输出结果为: ``` Cat is eating Cat is moving ``` 六、实验总结 本次实验通过学习类的封装方法、基本的面向对象程序设计方法、继承和多态、抽象类接口等重要技术,提高了我对Java编程语言的理解和应用能力。通过实验,我深刻认识到面向对象编程思想的重要性和优越性,掌握了面向对象程序设计的基本方法和技术,能够熟练运用Java语言进行面向对象程序设计。在今后的学习和工作中,我将继续加强对Java编程语言的学习和应用,不断提高自己的编程能力和创新能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值