专栏首页闻道于事Java面向对象之抽象类,接口

Java面向对象之抽象类,接口

抽象类:

含有抽象方法的类被声明为抽象类 抽象方法由子类去实现

含有抽象方法的类必须被声明为抽象类

抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法

抽象方法:

声明而未被实现的方法

抽象类不能被实例化 子类实现不了, 由下一级子类去实现, 当前类声明为抽象类, 继承的这个方法声明为抽象方法 抽象方法的权限修饰符必须为public

abstract

//人类
public class Person {
    private String name;
    //自定义属性  引用类型 宠物
    private Pet pet;
    
    public Person() {
        
    }
    
    public Person(String name, Pet pet) {
        this.name = name;
        this.pet = pet;
    }

    public void petHappy() {
        pet.scream();
    }
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Pet getPet() {
        return pet;
    }

    public void setPet(Pet pet) {
        this.pet = pet;
    }
}
// 父类宠物类 抽象类
public abstract class Pet {
    private String pname;
    //抽象类可以有构造方法
    public Pet() {
    }

    public Pet(String pname) {
        this.pname = pname;
    }
    //抽象类 的抽象方法   不能有方法体
    public abstract void scream();

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }
}
//子类 老虎类
public class Tiger extends Pet {
    public String fur; // 毛的颜色

    public Tiger(String name, String fur) {
        super(name);
        this.fur = fur;
    }

    public Tiger() {
        super();
    }

    @Override
    public void scream() {
        System.out.println("这是一只老虎的声音 !");
    }

    public String getFur() {
        return fur;
    }

    public void setFur(String fur) {
        this.fur = fur;
    }
}
//子类 兔子类
public class Rabbit extends Pet {

    public String fur; // 毛的颜色

    public Rabbit(String name, String fur) {
        super(name);
        this.fur = fur;
    }

    public Rabbit() {
        super();
    }

    @Override
    public void scream() {
        System.out.println("兔子会卖萌 !");
    }

    public String getFur() {
        return fur;
    }

    public void setFur(String fur) {
        this.fur = fur;
    }
}
//主方法
public class Main {
    public static void main(String[] args) {
        Pet t1 = new Tiger("qqqq","www");
        Pet r1 = new Rabbit();
        
        Person p1 = new Person("小明", t1);
        Person p2 = new Person("小红", r1);
        
        p1.petHappy();
        p2.petHappy();
    }
}

接口:

一种特殊的抽象类,里面全部是由全局常量和公共的抽象方法所组成

类与类之间的实现关系

接口的实现也必须通过子类,使用关键字implements,而且接口是可以多实现的

一个类可以同时继承和实现接口

一个借口不能集成一个抽象类,但是却可以通过extends关键字同时继承多个接口,实现接口的多继承

public interface InterFaceTest1 {
    public static final String name = "hanqi";
    String pname = "tianqi";
    //接口定义的属性默认public static final
    public void testMethod();
}

 一个类去实现一个接口必须实现其中的方法

继承:Java中不支持多继承,一个类只能继承一个

接口:接口可以实现多个

//接口1
public interface Inter {
    int AGE=22;//接口中的常量都是全局常量,也就是默认 public全局公共的,static静态,final不可改变的
    public abstract void tell(); 
}
//接口2
public interface Inter2 {
    public abstract void say();
}
//接口3
public interface Inter3 extends Inter,Inter2{
    //接口继承接口
    //一个接口不能继承一个抽象类,但可以继承多个接口,实现接口的多继承
}
//抽象类
public abstract class Chouxc {
    public abstract void write();
}
//子类
public  class Shixian extends Chouxc implements Inter,Inter2{
    public void tell(){
        System.out.println("这是类实现的接口 Inter 的抽象方法");
    }
    public void say(){
        System.out.println("这是类实现的接口 Inter2 中的抽象方法");
    }
    public void write(){
        System.err.println("这是类继承的抽象类中的抽象方法");
    }
}
//主方法
public class InterTest1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Shixian s=new Shixian();
        s.tell();
        s.say();
        System.out.println(Inter.AGE);
        System.out.println(s.AGE);
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java之面向对象例子(二)

    定义一个Book类,在定义一个JavaBook类继承他 //book类 package com.hanqi.maya.model; public class B...

    二十三年蝉
  • JFinal极速开发框架使用笔记(四) _JFinalDemoGenerator实体类生成及映射自动化

    运行_JFinalDemoGenerator生成实体类和映射之前的项目结构: ? 运行之后: ? 生成和改变的文件: 实体类: package com.wazn...

    二十三年蝉
  • Java之面向对象概述,类,构造方法,static,主方法,对象

    一、面向对象概述 面向过程 “面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于...

    二十三年蝉
  • 依赖注入容器-- Autofac

    Autofac---Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高...

    小世界的野孩子
  • Spring Boot 2.X(十八):集成 Spring Security-登录认证和权限控制

    在企业项目开发中,对系统的安全和权限控制往往是必需的,常见的安全框架有 Spring Security、Apache Shiro 等。本文主要简单介绍一下 Sp...

    朝雾轻寒
  • 初探设计模式六大原则

    我想用贴近生活的语句描述一下自己对六种原则的理解。也就是不做专业性的阐述,而是描述一种自己学习后的理解和感受,因为能力一般而且水平有限,也许举的例子不尽妥当,还...

    外婆的彭湖湾
  • 通过简单代码示例了解七大软件设计原则

    本文档设计源码地址:https://gitee.com/daijiyong/SoftwareDesignPrinciples

    你好戴先生
  • 设计模式-装饰者模式

    用户5927264
  • 设计模式 接口隔离原则

    接着,要进行更改了。对好看的定义,发生了改变,那么就应该改变PettyGirl中的内容,但是已经在接口中定义了。那么就有问题了。即,接口承担的内容过多导致

    mySoul
  • FactoryMethod工厂方法模式升级成AbstractFactory抽象工厂模式

    具体参考抽象工厂(AbstractFactory)模式-创建型模式,本文在FactoryMethod工厂方法模式(创建型模式)的基础上进行业务进一步抽象,不做详...

    郑小超.

扫码关注云+社区

领取腾讯云代金券