java -- 抽象类与接口类

一.protected权限修饰符

public class ProtectedTest {
    public static void main(String[] args) {

        // protected修饰的属性和方法本包中可以调用。
        // 不同包中的子类也可以访问protected修饰的属性和方法
        Person person = new Person();
    }
}
import com.atguigu.exer.Person;

public class ProtectedTest {
    public static void main(String[] args) {
        Person person = new Person();
        Student stu = new Student();
        stu.demo();
    }
}

// 不同包的子类也可以访问protected修饰的属性和方法
class Student extends Person{
    public void demo() {
        System.out.println(protectedName);
        say();
    }
}
public class Person {
    protected String protectedName;

    protected void say() {
        System.out.println("say");
    }
}

二.abstract抽象类

1.关键字:abstract(面向对象的四大特性:封装性,继承性,多态性,抽象类)

2.abstract可以修饰方法:抽象方法
  抽象方法没有方法体

3.abstract可以修饰类:抽象类
  1.抽象方法所在的类必须为抽象类
  2.抽象类不能被实例化
  思考:那么抽象类有构造器吗?有-因为子类的实例化过程:必须调用父类的构造器
  3.抽象类中可以没有抽象方法。可以有非抽象方法
  4.非抽象子类必须重写抽象父类中的抽象方法。如果非抽象方法的父类重写了抽象方法,那么子类就不用在重写抽象方法

4.abstract不可以和那些关键字一起使用?
  private,final,static

public class AbstractTest {
    public static void main(String[] args) {
        Book book = new Book();
        book.read();
    }
}

// 创建一个抽象类
abstract class Library{
    // 方法本身就没有实际含义,但是又必须的写因为考虑到多态,所以这样的方法可以声明成抽象方法
     public abstract void read();
}

class Book extends Library{
    public void read() {
        System.out.println("读一本好书,品味一个完整的人生");
    }
}

三.类的成员之一:代码块

格式:{}

说明:
  1.代码块只能被static修饰

代码块的分类:静态代码块 VS 非静态代码块

静态代码块:
  1.用来对类中的信息进行初始化
  2.静态代码块是随着类的加载而加载的,只加载一次
  3.静态代码块可以有多个,执行顺序从上到下依次执行
  4.静态代码块中只能 调用类变量和静态方法(因为加载时机不同)
  5.静态代码块的加载优先于非静态代码块

非静态代码块:
  1.用来对对象进行初始化
  2.非静态代码块是随着对象的创建而加载的
  3.非静态代码的加载优先于构造器
  4.非静态代码块可以有多个,执行顺序从上到下依次执行
   5.非静态代码块中可以调用类变量和静态方法

如果一些是代码只是加载一次,可以考虑放到静态代码块当中

    {
        //    非静态代码块
        System.out.println("{}"+ Name );

    }

    static {
        //静态代码块
        System.out.println("{1}" + age);
    }

四.final关键字

请简述final关键字?
 final修饰的类:不能被继承

final修饰的方法:不能被重写

final修饰的变量:只能被赋值一次,且必须进行初始化(往往修饰的变量作为常量)
final 的赋值方式有三种:显示赋值,代码块赋值,构造器赋值

 *    变量的赋值:1.默认值    2.显示赋值    3.代码块赋值    4.构造器赋值    5.对象名.方法名/对象名.属性
 *
 *    赋值顺序:1 <- 2/3(谁在上,谁先赋值) <- 4 <- 5

例子1

// 设计模板 

public class TemplateMethod {
    public static void main(String[] args) {
        Code code = new Code2();
        code.runTime();
    }
}

abstract class Code{

    public void runTime(){
        // 计算代码开始的时间
        long start = System.currentTimeMillis();

        // 执行需要执行的代码
        runCode();

        // 计算代码结束时间
        long end = System.currentTimeMillis();

        // 计算时间差
        System.out.println("time=" + (end - start));
    }

    public abstract void runCode();
}

class Code2 extends Code{

    public void runCode() {
        for(int i = 1;i < 100;i++){
            if(i % 2 == 0) {
                System.out.println(i);
            }
        }
    }
}

五.接口类interface

接口在jdk1.8时的新特性:

  1.接口除了可以有常量和抽象方法,还可以有默认方法和静态方法

  2.如何调用静态方法:接口名.静态方法名
  如何调用默认方法:实现类的对象.默认方法名

  3.类优先原则:一个类的父类和接口中有相同的方法。通过该类的对象调用的该方法是父类中的方法

  4.一个类中实现了多个接口,如果多个类中有相同的默认方法,那么该类必须重写该方法

  5.在类中的方法,调用接口中的默认方法:接口名.super.默认方法名

接口:interface

格式:interface 接口名{ }

说明:
  1.接口和类是并列关系
  2.接口不能被实例化
  3.接口中只能有常量和抽象方法(jdk1.8之前)
  4.接口和接口之间的关系:继承关系,而且是多继承
  5.类和接口的关系:class 类名 implements 接口,而且可以实现多个接口(Java是单继承多实现)
  6.接口和类之间的多态性

接口类的用法:
  1.通过接口类可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系
  2.通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能
  3.接口主要用来定义规范。接触耦合关系

public class InterfaceTest {
    public static void main(String[] args) {

        Mouse mouse = new Mouse();

        Computer computer = new Computer();
        computer.useMouseBlue(mouse);
        computer.useMouseUsb(mouse);

        // 创建接口的匿名实现类的对象
        USB kb = new USB() {
            @Override
            public void start() {
                // TODO Auto-generated method stub
                System.out.println("键盘正常连接");
            }

            @Override
            public void end() {
                // TODO Auto-generated method stub
                System.out.println("键盘断开连接");
            }
        };

        computer.useMouseUsb(kb);

        // 创建了一个匿名实现类的匿名的对象
        computer.useMouseUsb(new USB() {

            @Override
            public void start() {
                // TODO Auto-generated method stub
                System.out.println("晚上好");
            }

            @Override
            public void end() {
                // TODO Auto-generated method stub
                System.out.println("明天见");
            }

        });

    }
}

class Computer{

    public void useMouseUsb(USB usb) {
        usb.start();
        System.out.println("连接正常");
        usb.end();
    }

    public void useMouseBlue(BlueTooth bt) {
        bt.startBlue();
        System.out.println("蓝牙连接正常");
        bt.endBlue();
    }
}

interface BlueTooth{
    void startBlue();
    void endBlue();
}

interface USB{
    void start(); // 默认会自动添加 public abstract
    void end();
}

class Mouse implements USB,BlueTooth{

    @Override
    public void start() {
        System.out.println("鼠标开始运行了");
    }

    @Override
    public void end() {
        System.out.println("鼠标停止运行了");
    }

    @Override
    public void startBlue() {
        System.out.println("蓝牙开始连接了");
    }

    @Override
    public void endBlue() {
        System.out.println("蓝牙断开连接了");
    }
}

原文地址:https://www.cnblogs.com/jiujiang/p/11613891.html

时间: 2024-11-08 00:18:53

java -- 抽象类与接口类的相关文章

java抽象类和接口

1.抽象类 抽象类在概念上描述的是抽象世界,抽象类刻画了公有行为的特征,并且通过继承机制传送给它的派生类.抽象类使用关键字abstract 修饰,语法如下: abstract class 类名{ 类体; } 抽象方法是指在抽象类中某些成员方法没有具体的实现,只有方法声明.抽象方法使用关键字abstract 修饰,格式如下: public abstract 返回类型 方法名([参数列表]); 抽象类和抽象方法的具体规则如下: 1.用abstract 关键字修饰一个类时,该类叫做抽象类,用abstr

JAVA学习经验--总结JAVA抽象类和接口

* --总结JAVA抽象类和接口  * 1.抽象类:  *             1>抽象类可以修饰方法,修饰类,但不能修饰属性,不能被实例化  *             2>抽象类可以被继承,只能是单继承,继承抽象类必须实现抽象方法  *             3>抽象类不能被static ,fina,private一起修饰  *             4>抽象类是有多态性的  *  * 2.接口:  *             1>接口是一种特殊的抽象类,不能被实

浅析Java抽象类和接口的比较

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意.其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解.对于设计意图的理解是否正确.合理.本

JAVA抽象类和接口的深入探讨

Java 语言中,抽象类(abstract class) 和接口(interface) 是抽象思想的两种体现形式.初学者很容易把这两者搞混,所以Java面试中考抽象类和接口的区别的面试题也常有出现的. 本文将从下面几个方面深入探讨一下Java 抽象类和接口 一.抽象类语法及规范 二.接口的语法及规范 三.抽象类和接口的区别 ,将从语义细节及设计层面两方面来描述 本文由本人查阅资料并结合自己理解所作,如果有理解不到位的地方,欢迎各位斧正. 一.抽象类 抽象类使用 abstract class 来定

Python抽象类和接口类

一.抽象类和接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能. 实践中,继承的第一种含义意义并不很大,甚至常常是有害的.因为它使得子类与基类出现强耦合. 继承的第二种含义非常重要.它又叫"接口继承".接口继承实质上是要求"做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用

Java抽象类与接口的区别

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. 抽象类 抽象类是用来捕捉子类的通用特性的 .它不能被实例化,只能被用作子类的超类.抽象类是被用来创建继承层级里子类的模板.以JDK中的GenericServlet为例: public abstract class GenericServlet implements Servlet, ServletC

java 抽象类和接口

抽象类和接口,一直比较容易混淆,特性很类似,但是细节上又有不一样,总结如下. 首先,要了解什么是抽象方法. 抽象方法是只有方法声明没有方法体的方法用关节自abstract声明,例如 1 abstract returnType funName(Type t1,type2,t2...); 2 //例如 3 abstract int help(int k);; 包含了抽象方法的类,一定是抽象类.但是抽象类中可以没有抽象方法,也可以用自己的类变量(static修饰)和实例变量(非static 但是在类中

JAVA抽象类与接口的详细解读与示例

接口存在的原因: JAVA是单继承的,不支持多继承,但是有了接口,JAVA可以实现多个接口: 一个类要是实现某一个接口就必须实现接口内声明的所有方法(强迫执行,即便是空方法,也要实现): 接口特点: 1.接口内所有方法只有声明,没有方法体(隐式声明),例如:public abstract void func(); 2.接口内的所有变量都默认是public static final ,必须被显示初始化: 3.接口没有构造方法,不能被实例化: 4.实现接口的类要实现所有的抽象方法,否则该类就必须声明

java 抽象类、接口的使用

理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类(本文 中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法, 请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是 所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这