java的抽象类代码讲解(抽象类 java)

发布时间:2022-11-10

本文目录一览:

  1. java中抽象类,抽象方法,抽象类是什么意思!实例解说一下! 本人是个刚学习者!
  2. java 的抽象类解释
  3. java中什么是抽象类
  4. java程序,抽象类实现,求具体代码
  5. java编程抽象类技术如何实现?

java中抽象类,抽象方法,抽象类是什么意思!实例解说一下! 本人是个刚学习者!

  • 含有抽象方法的类就只能是抽象类
  • 抽象类结构:abstract class 类名{ }
  • 抽象方法结构:(public) abstract void 方法名();
  • 抽象类只能用来继承,抽象方法必须被重写
  • 抽象类不能实例化,也就是不能用new调用
  • 抽象类可以有:抽象类、普通属性和方法、构造方法(不能用new实例,只能用来被子类调用)
public abstract class Human { // 抽象父类
    private final int time = ++count; // 对象计数器
    private static int count; // 静态池
    // 属性封装
    private String name; // 封装三步:隐藏属性,提供getter与setter方法,构造中调用setter初始化
    private int age;
    private String sex;
    // gettersetter
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        // 处理代码:姓名不能为空,且不能包含数字
        if (name.length() == 0) {
            System.out.println("姓名不能为空");
        } else if (this.isWrongName(name)) { // 调用私有方法处理
            System.out.println("非法姓名,不能包含数字");
        } else {
            this.name = name;
        }
    }
    private boolean isWrongName(String name) { // 判断非法姓名输入(私有)
        char[] ch = name.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            try {
                int s = Integer.parseInt(String.valueOf(ch[i]));
                s++; // 废
                return true;
            } catch (Exception e) {
                continue; // 出错就继续下一次循环转换
            }
        }
        return false; // 先返回错误
    }
    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        if (age <= 0) {
            System.out.println("年龄有误");
        } else {
            this.age = age;
        }
    }
    public String getSex() {
        return this.sex;
    }
    public void setSex(String sex) {
        if (sex.length() > 1 || sex.length() == 0) {
            System.out.println("性别设定错误");
        } else if (sex.toCharArray()[0] == '男' || sex.toCharArray()[0] == '女') {
            this.sex = sex;
        } else {
            System.out.println("性别设定错误");
        }
    }
    // 构造
    public Human() { // 无参
        this("无名氏", 25, "男");
    }
    public Human(String name, int age, String sex) { // 全参
        this.setName(name);
        this.setAge(age);
        this.setSex(sex);
    }
    // 抽象方法
    public abstract void speak(); // 说话
    public abstract void work(); // 工作
    public abstract void eat();
    // 获取对象创建数目
    public int getHumanClassUseTimes() {
        return this.time;
    }
}

java 的抽象类解释

这是一种面向接口的编程,就是父类的引用指向了子类对象。 打个比方一个抽象类:动物,一个子类:狗 狗继承了类 动物

动物 dongwu = new 狗();

new出来狗的对象的引用(指向)了dongwu,通过dongwu来访问狗增加了程序的通用性和灵活性,是一种充分体现了面向对象编程的多态性。 运行的时候可以统一调用dongwu的方法,来动态实现狗的特性。 动物也可以指向猫:例如:

动物 dongwu = new 猫();

如果有个方法 动物 叫 则可以统一用dongwu.叫() 在运行时动态的选择调用哪个对象, 你传的是new 猫() 则调用猫叫方法, 如果是new 狗() 则调用狗叫方法 以后你会经常碰到这种写法。 抽象类,或者接口都可以这样:

接口(抽象类)一个引用的名字 = new 实现了接口(或继承了抽象类)的名字();

java中什么是抽象类

由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类。抽象的类无法进行实例化,因为它不是具体存在的类,或者说这样的类还不够完善,不能直接使用new关键字调用其构造器生成该类的对象。我们可以使用abstract定义一个抽象类和抽象方法,示例代码如下:

abstract class 类名 {
    abstract int 方法名(int x, int y);
}

抽象的方法没有方法体。需要注意的是在抽象类中既可以有抽象方法,也可以有普通方法,注意抽象方法是没有方法体的(也就是方法后面是没有大括号的)。凡是继承这个抽象类的实体子类,都必须要实现这个抽象方法。 我们总结一下抽象类的特点:

  1. 抽象类不能被实例化
  2. 构造方法 和 static 方法不能是抽象的
  3. 父类的抽象方法往往在子类中实现
  4. 抽象类可以具有指向子类对象的对象引用

java程序,抽象类实现,求具体代码

package test;
/**
 *
 * @author JinnL
 * 父类抽象类
 */
public abstract class Car {
    // 转弯
    abstract void turn();
    // 启动
    abstract void start();
    void what() {
        System.out.println("this is " + this.getClass().getSimpleName());
    }
    public static void main(String[] args) {
        /**
         * 方法入口
         */
        Car[] cars = { new Bicycle(), new Automobile(), new GasAutomobile(), new DieselAutomobile() };
        for (Car car : cars) {
            car.start();
        }
    }
}
class Bicycle extends Car {
    @Override
    void turn() {
        System.out.println("this is " + this.getClass().getSimpleName());
    }
    @Override
    void start() {
        System.out.println("this is " + this.getClass().getSimpleName());
    }
    void what() {
    }
}
class Automobile extends Car {
    @Override
    void turn() {
        System.out.println("this is " + this.getClass().getSimpleName());
    }
    @Override
    void start() {
        System.out.println("this is " + this.getClass().getSimpleName());
    }
}
class GasAutomobile extends Automobile {
    // 重写start turn
    @Override
    void turn() {
        System.out.println("this is " + this.getClass().getSimpleName());
    }
    @Override
    void start() {
        System.out.println("this is " + this.getClass().getSimpleName());
    }
}
class DieselAutomobile extends Automobile {
    @Override
    void start() {
        System.out.println("this is " + this.getClass().getSimpleName());
    }
    void what() {
        System.out.println("this is " + this.getClass().getSimpleName());
    }
}

java编程抽象类技术如何实现?

java编程一直以来都是互联网上使用比较广泛的一种编程语言,所以我们今天就一起来了解一下java编程中的抽象类是如何来实现的,希望通过对本文的阅读,大家能够对java编程技术有更深刻的认识。 AbstractMap抽象类实现了一些简单且通用的方法,本身并不难。但在这个抽象类中有两个方法非常值得关注,keySet和values方法源码的实现可以说是教科书式的典范。 抽象类通常作为一种骨架实现,为各自子类实现公共的方法。上一篇我们讲解了Map接口,此篇对AbstractMap抽象类进行剖析研究。 Java中Map类型的数据结构有相当多,AbstractMap作为它们的骨架实现实现了Map接口部分方法,也就是说为它的子类各种Map提供了公共的方法,没有实现的方法各种Map可能有所不同。 抽象类不能通过new关键字直接创建抽象类的实例,但它可以有构造方法。AbstractMap提供了一个protected修饰的无参构造方法,意味着只有它的子类才能访问(当然它本身就是一个抽象类,其他类也不能直接对其实例化),也就是说只有它的子类才能调用这个无参的构造方法。 在Map接口中其内部定义了一个Entry接口,这个接口是Map映射的内部实现用于维护一个key-value键值对,key-value存储在这个Map.Entry中。AbstractMap对这个内部接口进行了实现,一共有两个:一个是可变的SimpleEntry和一个是不可变的SimpleImmutableEntry。

public static class SimpleEntry implements Entry, java.io.Serializable

实现了Map.Entry接口,并且实现了Serializable(可被序列化)。 它的方法比较简单都是取值存值的操作,对于key值的定义是一个final修饰意味着是一个不可变的引用。另外其setValue方法稍微特殊,存入value值返回的并不是存入的值,而是返回的以前的旧值。需要重点学习的是它重写的equals和hashCode方法。

public static class SimpleImmutableEntry implements Entry, java.io.Serializable
SimpleImmutableEntry

定义为不可变的Entry,其实是事实不可变,因为它不提供setValue方法,在多个线程同时访问时自然不能通过setValue方法进行修改。它相比于SimpleEntry其key和value成员变量都被定义为了final类型。调用setValue方法将会抛出UnsupportedOperationException异常。 它的equals和hashCode方法和SimpleEntry一致。 接下来查看AbstractMap抽象类实现了哪些Map接口中的方法。

public int size()

Map中定义了一个entrySet方法,返回的是Map.Entry的Set集合,直接调用Set集合的size方法即是Map的大小。

public boolean isEmpty()

调用上面的size方法,等于0即为空。

public boolean containsKey(Object key)

这个方法的实现较为简单,通过调用entrySet方法获取Set集合的迭代器遍历Map.Entry,与参数key比较。Map可以存储为null的key值,由于key=null在Map中存储比较特殊(不能计算hashCode值),所以在这里也做了判断参数key是否为空。