java学习----继承与接口

简介: java学习----继承与接口1.基本概念与注意事项2.代码演示3.学习反思

1.基本概念与注意事项

继承

1.继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

基本格式:

class Person{
   // ....成员变量,构造方法
}
class Student extends Person{
    //....类体,调用
}



2.注意:

子类不能选择性继承父类;

Java不支持多重继承,但一个类可以实现多个接口,从而克服单继承的缺点;

构造方法不会被子类继承,但可以从子类中调用父类的构造方法。

3.子类继承其父类的所有public和protected成员,但不能继承其父类的private成员。那么如何在子类中访问到父类中的字段呢,我们可以在父类中提供用来访问其私有字段的public或protected方法,子类使用这些方法来访问相应的字段。

4.子类重写了父类中的某一个方法,隐藏父类中的字段,假如想在子类中访问到父类中被重写的方法和隐藏父类的字段,可以在子类中通过使用关键字super来调用父类中被重写的方法和访问父类中被隐藏的字段。

5.子类不继承其父类的构造方法。

当使用无参数的super()时,父类的无参数构造方法就会被调用;

当使用带有参数的super()方法时,父类的有参数构造方法就会被调用。

6.注意

如果要初始化父类中的字段,可以在子类的构造方法中通过关键字super调用父类的构造方法;

对父类的构造放的调用必须放在子类构造方法的第一行;

如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器;

如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表;

子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。

接口

1.接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。

2.一个类可以实现不止一个接口。

3.一个接口可以继承另一个接口,或者另一些接口,接口也可以继承,并且可以多继承。

4.一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法。

5.接口中所有的方法都是抽象的和public的,所有的属性都是public,static,final的。

6.接口用来弥补类无法实现多继承的局限。


2.代码演示

1.银行存取钱


import java.util.Scanner;
class Bank{
    private int money;
public Bank(int money){
    super();
    this.money=money;
}
    public void setMoney(int money) {
       this. money=money;
    }
    public double getMoney() {
        return money;
    }
    public int save(int jia){
       return money=money+jia;
    }
    public int out(int jian){
       return money-=jian;
    }
    public void yue(int money3){
        money=money3;
    }
}
public class java17 {
    public static void main(String[] args) {
       Bank bank=new Bank(10000);
        Scanner m=new Scanner(System.in);
        int s= m.nextInt();
        bank.save(s);
        System.out.println("您存储" +s+"元"+"余额为:"+ bank.getMoney());
        Scanner n=new Scanner(System.in);
        int o= m.nextInt();
        bank.out(o);
        System.out.println("您取走" +s+"元"+"余额为:"+ bank.getMoney());
    }
}


2.面向对象综合性习题

18.定义一个学生类 Student,它继承自 Person 类。

(1)Person类:

成员变量(私有的):

姓名(name),字符串类型(String);

性别(sex),字符型(char);

年龄(age),整型(int)。

成员方法:

构造方法:对所有成员变量初始化

重写Object类的toString方法,返回字符串形如:姓名,性别,年龄

重写Object类的equals方法,当且仅当两人的姓名相等且性别相等且年龄相等时,认为两人相等。

(2)Student 类:

新增加的成员变量:

学号(number),长整型;

三门功课的成绩:哲学(phi),整型;

英语 (eng),整型;

计算机(comp),整型。

新增加的方法:

求三门功课的平均成绩 public double aver():该方法没有参数,返 回值类型为 double 型;

求三门功课成绩的最高分 public int max():该方法没有参数,返回值为 int 型;

求三门功课成绩的最低分 public int min():该方法没有参数,返回值为 int 型。

覆盖父类的同名方法:public String toString():获取学号、姓名、性别、平均分、最高分、最低分信息。

覆盖父类的同名方法equals:除了姓名、性别和年龄相等以外,学号也相等时,认为两学生相等。

(3)编写测试程序。程序要求实现:在程序中设置若干个学生信息(学号、姓名、性别、年龄、各科分数),要求通过运行程序,在屏幕中输出如下的结果:例如:学号:310 姓名:xpc 性别:n 年龄:19 平均分110 最高分:122 分 最低分:99。 试着比较两名学生是否相等。

class Per1{
    public String name;
    public  int age;
    public String sex;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {
            this.age = age;
    }
    public int getAge() {
        return age;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getSex() {
        return sex;
    }
    public Per1(){
    }
    public Per1(String name,int age,String sex) {
        this.age = age;
        this.sex = sex;
        this.name = name;
    }
    public String toString(){
        return name+age+sex;
    }
    public boolean equals(String name1,String name2,int age1,int age2){
        if (name1.equals(name2)&&age1==age2){
            return true;
        }else {
            return false;
        }
    }
}
class Student1 extends Per1{
    int phi,eng,comp;
    public Student1(String name, int age, String sex,int phi,int eng,int comp) {
        super(name, age, sex);
        this.phi=phi;
        this.eng=eng;
        this.comp=comp;
        long number = 310;
    }public double aver(){
        System.out.println((phi+eng+comp)/3);
        return (phi+eng+comp)/3;
    }
    public int max(){
        int max=phi;
        if (eng>max){
            max=eng;
        }else if(comp>max){
            max=comp;
        }else {
            max=phi;
        }
        System.out.println(max);
        return max ;
    }
    public int min(){
        int min=phi;
        if (eng<min){
            min=eng;
        }else if(comp<min){
            min=comp;
        }else{
            min=phi;
        }
        System.out.println(min);
        return min;
    }
    public String toString(){
        return "["+name+age+sex+max()+aver()+min()+"]";
    }
     boolean equals(long number1,long number2){
        if (number1 == number2) {
            return true;
        }else{
            return  false;
        }
    }
}
public class Java18 {
    public static void main(String[] args) {
        Per1 c1=new Per1("xpc",19,"m");
        Per1 c2=new Per1("x",19,"n");
        Student1 a1=new Student1("pc",18,"m",110,122,99);
        boolean equals=c1.equals(c1.name,c2.name,c1.age,c2.age);
        if(equals){
            System.out.println("两个人相同");
        }else{
            System.out.println("两个人不相同");
        }
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(a1);
    }
}

3.接口练习例题


//.按如下要求编写Java程序:
 //       (1)定义接口A,里面包含值为3.14的常量PI和抽象方法double area()。
 //       (2)定义接口B,里面包含抽象方法void setColor(String c)。
 //       (3)定义接口C,该接口继承了接口A和B,里面包含抽象方法void volume()。
  //      (4)定义圆柱体类Cylinder实现接口C,该类中包含三个成员变量:底圆半径radius、
  //      圆柱体的高height、颜色color。
    //    (5)创建主类来测试类Cylinder。
interface A{
   double pi=3.14;
   void doubleArea();
}
interface B{
    void setColor(String c);
}
interface c extends A,B {
     void doublevolume();
}
abstract class tem implements c{
    public void doubleArea(){};
    public void setColor(String c){};
    public void doublevolume(){};
}
class Cylinder extends tem{
    private int radius;
    private int height;
    private String color;
    public double area(){
        return pi*radius*radius;
    }
    public double volume(){
        return area()*height;
    }
    public String color(){
        return color;
    }
}
public class lianxijiekou {
    public static void main(String[] args) {
        Cylinder h=new Cylinder();
        h.area();
    }
}

4.接口加运算


interface Icompute{
   int com(int n,int m);
}
class Usecompute{
    private int n;
    private int m;
    public void use(Icompute com,int one,int two){
        this.n=n;
        this.m=m;
        com.com(n,m);
    }
}
class Add implements Icompute{
    private int n;
    private int m;
    private int ret;
    public int com(int n, int m) {
        this.n=n;
        this.m=m;
        this.ret=n+m;
        System.out.println("ret="+ret);
        return ret;
    }
}
public class java25 {
    public static void main(String[] args) {
        Icompute n=new Add();
        n.com(4,8);
    }
}


3.学习反思

考核还是不理想,一道大题也运算不出来,算法题也没有回顾,整天忙得这么狠,但是结果还是不理想,找好自身问题,对自己询问:

知道某一代码的来龙去脉!

为什么这么写?

从哪来的每一步?

什么错误?

原因:全面、深刻的探寻

产生什么结果?

如何解决?

问题:

不是“没听懂”,而是“记不住”【要能说出来,讲清楚】

不能知其然,而不知其所以然【合理性】

只懂表象,不懂内核【原理性】


相关文章
|
27天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
104 3
|
14天前
|
Java API
Java中内置的函数式接口
Java中内置的函数式接口
19 2
|
19天前
|
Java
在Java中如何实现接口?
实现接口是 Java 编程中的一个重要环节,它有助于提高代码的规范性、可扩展性和复用性。通过正确地实现接口,可以使代码更加灵活、易于维护和扩展。
42 3
|
18天前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
55 1
|
18天前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
35 1
|
18天前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
32 1
|
23天前
|
Java Android开发
Eclipse 创建 Java 接口
Eclipse 创建 Java 接口
25 1
|
28天前
|
Java
java线程接口
Thread的构造方法创建对象的时候传入了Runnable接口的对象 ,Runnable接口对象重写run方法相当于指定线程任务,创建线程的时候绑定了该线程对象要干的任务。 Runnable的对象称之为:线程任务对象 不是线程对象 必须要交给Thread线程对象。 通过Thread的构造方法, 就可以把任务对象Runnable,绑定到Thread对象中, 将来执行start方法,就会自动执行Runable实现类对象中的run里面的内容。
39 1
|
1月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
7月前
|
存储 Java
【JAVA学习之路 | 进阶篇】Map接口及其实现类及常用方法
【JAVA学习之路 | 进阶篇】Map接口及其实现类及常用方法