抽象类、接口、内部类总结

抽象方法与抽象类

抽象方法与抽象类必须使用abstract修饰,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。
它们遵守的规则:
1 用abstract修饰,且抽象方法没有方法体(注意与空方法体的区别)。
2 抽象类不能实例化,即使该抽象类不包含抽象方法
3 抽象类包含属性、方法、初始化块、内部类、构造器、枚举六种类型。其构造器主要用于被子类调用。
4 包含抽象方法,或者父类包含抽象方法而没有实现,必须定义为抽象类。

abstract不能修饰属性和构造器,不能与static同时使用,也不能和private同时使用。

模版模式简单规则:

抽象父类只定义需要使用的某些方法,其余留给子类实现。
父类中包含需要调用其他系列方法的方法,这些调用既可以由父类实现也可以由子类实现,父类里提供的一些方法只是一些通用的算法,其实现也并不完全有自身实现,而必须依赖子类的辅助。

接口:
其修饰符可以是public或默认的包权限访问控制符。
接口中可以包含属性(只能是常量),方法(只能是抽象方法),内部类(包括内部接口)和枚举类定义
接口中的所有成员都是public权限(也可以省略不写),而接口中的属性则默认是public static final。
一个Java源文件中最多只有一个public接口,且与该源文件的主文件名相同。
实现接口的方法时只能使用public权限,因为子类重写父类方法或实现接口方法是访问权限只能更大或者相等。

面向接口编程的典型应用:简单工厂模式、命令模式。

内部类
内部类的作用
1 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包内的其他类访问该类
2 内部类成员可以直接访问外部类的私有数据,而外部类不能访问内部类的实现细节。
3 匿名内部类适用于创建那些只需要使用一次的类

内部类分为成员内部类和局部内部类,而局部内部类又分为非静态内部类和静态内部类,其在外部类中与其他静态,和非静态成员的使用类似。
使用示例:
class Out{
 class In{
  public In(String msg){
   System.out.println(msg);
  }
 }
}

public class CreateInnerInstance {

/**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Out.In in = new Out().new In("测试");
 }
}

匿名内部类格式
new 父类构造器(实参列表)|实现接口()
{
 //匿名内部类的类体部分
}
匿名内部类必须继承一个父类或实现一个接口
匿名内部类使用规则:
1 不能使抽象类
2 不能定义构造器,因为没有类名,但可以定义初始化块,可以通过初始化块来完成构造器的工作。

使用实例:
interface Product{
 public double getPrice();
 public String getName();
}
public class TestAnonymous {

/**
  * @param args
  */
 public void test(Product p){
  System.out.println("购买了一个"+p.getName()+",花掉了"+p.getPrice());
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  TestAnonymous ta = new TestAnonymous();
  ta.test(new Product()
    {
     public double getPrice(){
      return 383.9;
     }
     public String getName(){
      return "美女";
     }
    }  
  );
 }

}

枚举类使用实例1:
public enum SeansonEnum
{
 SPRING,SUMMER,FALLL,WINTER;
}

枚举类使用实例2:
public enum Gender
{
 MAIL("男"),FEMAIL("女");
 private String name;
 private Gender(String name){
  this.name = name;
 }
 public String getName(){
  return this.name;
 }
}

时间: 2024-10-13 16:23:46

抽象类、接口、内部类总结的相关文章

8 面向对象之抽象类+接口+内部类

1 final关键字 用法:  1)使用final修饰变量,该变量就变成常量,在运行的过程中无法重新赋值. 2)使用final修饰方法,该方法无法在子类中重写 3)使用final修饰的类,不能被继承(派生其他子类) JDK中常见的final修饰的类: java.lang.Math   java.lang.String 2 抽象类和抽象方法 抽象方法:使用abstract修饰的方法.特征: 没有方法体. 抽象类:使用abstract修饰的类. 特点: 1)抽象类中可以包含抽象方法.包含抽象方法的类

接口,抽象类与内部类

---恢复内容开始--- 抽象类 语法详解 当一个类中有一个抽象方法,那么他必须是一个抽象类 抽象类不能通过new来创建对象 抽象类可以包含抽象方法,但不是必须 若一个类继承自抽象类,那么他必须实现父类中的抽象方法,或者将自己声明为抽象类. 当一个类声明实现某个或某些接口,但是却没有实现它所有的抽象方法,那么这个类也必须声明为抽象类 接口中的抽象方法必须用public修饰,抽象类中的抽象方法可以用除了private以外的修饰符修饰. 想必接口,抽象类可以包含属性和方法,接口中只能包含抽象方法 抽

黑马程序员_Java抽象类和内部类

- - - - - android培训.java培训.期待与您交流! - - - - - - 类(class) 类是相似对象中共同属性和方法的集合体 在面向对象中定义类,就是在描述事物,就是在定义属性(变量)和行为(方法).属性和行为共同成为类中的成员(成员变量和成员方法). 封装.继承和多态 面向对象方法中软件设计的主体是类,类是相同属性和方法的封装体,因此类具有封装性 子类可以在继承父类所有属性和方法的基础上,再增加自己特有的属性和方法,因此类具有继承性 在一个类层次中,定义为根类的对象可被

小知识(五):抽象类&接口

抽象类abstract: 抽象类和抽象方法可以用abstract关键字进行标识.就是没有完全定义的类或方法.所以不能直接实例化操作. 就因为他没完全定义所以不能用sealed关键字进行密封. 抽象方法不含程序主体: public abstract class Student { //抽象方法,不含程序体 public abstract void GetStudentID(); //子类可访问字段 prodected int i; //定义i的属性 public int I { get { ret

普通类 抽象类 接口

首先得搞懂什么是抽象类:一.概念:    在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.    比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆.三角形这样一些具体概念.它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念.正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的

虚函数/纯虚函数/抽象类/接口/虚基类

1.多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 在Java中,没有指针,就直接用父类实例化子类对象 多态性就是允许将子类类型的指针赋值给父类类型的指针,多态是通过虚函数实现的,多态可以让父类的指针有“多种形态”,这是一种泛型技术. 所谓泛型技术,就是试图使用不变的代码来实现可变的算法 2.虚函数 在基类的类定义中,定义虚函数的一般形式: Virtual 函数返回值类型 虚函数名(形参表){ 函数

Java内部类(4):静态内部类&接口内部类

使用static修饰的内部类我们称之为静态内部类,不过我们更喜欢称之为嵌套内部类.静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有.没有这个引用就意味着: 1. 它的创建是不需要依赖于外围类的. 2. 它不能使用任何外围类的非static成员变量和方法. 1 interface Contents { 2 int value(); 3 } 4 5 interface Destination {

面向对象的理解 抽象类&接口

一.关于面向对象 1.什么是面向对象 在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu,显卡,主板,电源,风扇,把这些都通过主板链接到一起.我需要清楚的知道主机组装的每一个步骤. 介绍了面向过程,再说会正题,什么是面向对象?对于上面的装主机过程面向对象会把主机先抽象成一个机箱,机箱里有cpu,显卡,主板,电源.用主机的人,不关心里面是怎么工作的,也不需要知道内部逻辑,只知道插上电源就能用.面

19 抽象类 接口类 封装. 多态

主要内容: 1.  抽象类(接口类): 制定一个规范  : from abc import ABCMeta,abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def pay(self):pass class Alipay(Payment): def __init__(self,money): self.money = money def pay(self): print('使用支付宝支付了%s' % self.mon

“全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零六章:匿名内部类与抽象类接口注意事项 下一章 "全栈2019"Java第一百零七章:匿名内部类与构造方法注意事项 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&quo