抽象类

Java基础(四)面向对象三

眉间皱痕 提交于 2020-02-01 03:13:16
抽象类 abstract --没有具体的内容 1用 abstract 关键字来修饰一个类时,这个类叫做抽象类; 2用 abstract 来修饰一个方法时,该方法叫做抽象方法。 Ø 抽象方法:只有方法的声明,没有方法的实现。以分号结束: abstract int abstractMethod ( int a ) ; 3含有抽象方法的类必须被声明为抽象类。 4抽象类不能被实例化。抽象类是用来作为父类被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。 5不能用 abstract 修饰属性、私有方法、构造器、静态方法、 final 的方法。 模板设计模式 接口 :实现多重继承 l 有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是, Java 不支持多重继承。有了接口,就可以得到多重继承的效果。 l 接口 (interface) 是抽象方法和常量值的定义的集合。 l 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。 l 实现接口类: Ø class SubClass implements InterfaceA { } l 一个类可以实现多个接口,接口也可以继承其它接口。 l 接口的特点: Ø 用 interface 来定义。 Ø 接口中的所有成员变量都默认是由 public

48.抽象方法和抽象类

自作多情 提交于 2020-02-01 00:32:16
抽象方法 使用abstract修饰的方法,没有方法体,只有声明 抽象类 包含抽象方法的类就是抽象类 有抽象方法的类只能定义成抽象类 抽象类不能实例化,即不能用new来实例化抽象类。 抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。 抽象类只能用来被继承。 抽象方法必须被子类实现。 package OOprogress2 ; public class testAbstractClassAndFunction { public static void main ( String [ ] args ) { // Animal2 a = new Animal2(); //error 抽象不能new实例化对象 Animal2 a = new Dog2 ( ) ; a . shout ( ) ; //包装类 //Integer i; //extends Number(抽象类 ) } } //抽象类 abstract class Animal2 { //抽象方法 abstract public void shout ( ) ; //抽象类中也可有普通方法 public void run ( ) { System . out . println ( "跑啊跑!" ) ; } } class Dog2 extends Animal2 { @Override

行为模式之-----模版模式

£可爱£侵袭症+ 提交于 2020-01-31 12:42:52
定义: 一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 意图: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 主要解决: 一些方法通用,却在每一个子类都重新写了这一方法。 何时使用: 有一些通用的方法。 如何解决: 将这些通用算法抽象出来。 关键代码: 在抽象类实现,其他步骤在子类实现。 应用实例: 1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。 2、西游记里面菩萨定好的 81 难,这就是一个顶层的逻辑骨架。 3、spring 中对 Hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。 优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。 缺点: 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。 使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。 注意事项: 为防止恶意操作,一般模板方法都加上 final 关键词。

Meta类的选项

久未见 提交于 2020-01-31 10:03:17
abstract 这个属性是定义当前的模型类是不是一个抽象类。所谓抽象类是不会对应数据库表的。一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段。比如下面的代码中Human是一个抽象类,Employee是一个继承了Human的子类,那么在运行syncdb命令时,不会生成Human表,但是会生成一个Employee表,它包含了Human中继承来的字段,以后如果再添加一个Customer模型类,它可以同样继承Human的公共属性: class Human(models.Model): name=models.CharField(max_length=100) GENDER_CHOICE=((u'M',u'Male'),(u'F',u'Female'),) gender=models.CharField(max_length=2,choices=GENDER_CHOICE,null=True) class Meta: abstract=True class Employee(Human): joint_date=models.DateField() class Customer(Human): first_name=models.CharField(max_length=100) birth_day=models.DateField() 上面的代码,执行python

Java 学习多态笔记

风格不统一 提交于 2020-01-31 09:30:42
一. 多态 同一个对象在不同时期表现的出不形态,要构成多态必须满足以下三个前提 1.要有继承或实现 2.有方法的重写 3.有父类的引用指向对象 eg: public class Animal { public String name ="动物"; public void Eat(){ System.out.println("我是"+name); System.out.println("吃东西"); } } public class Cat extends Animal { // 1.有继承 public void Eat(){ // 2.有方法重写 System.out.println("猫吃鱼"); } } public class DuoTaiDemo { public static void main(String[] args) { Animal a = new Cat(); // 3. 有父类引用指向 a.Eat(); } } 二.多态的成员访问特点: 对于成员变量:编译看左边,执行也看左边 (以左边的类为准,调用的都是左边类中的成员方法 即 Animal 类中的成员变量) 对于成员方法:编译看左边,执行也看右边 (以左边的类为准,去编译如果没有方法会报错,但是执行的时候是调用的左边的的方法,因为方法 被重写 即执行Cat类中的Eat()方法) 三.多态的好处和弊端 好处

普通类,抽象类和接口之间的区别

删除回忆录丶 提交于 2020-01-31 05:31:04
一、普通类、抽象类和接口区别: 1. 普通类可以实例化,接口都不能被实例化(它没有构造方法),抽象类如果要实例化,抽象类必须指向实现所有抽象方法的子类对象(抽象类可以直接实例化,直接重写自己的抽象方法),接口必须指向实现所有所有接口方法的类对象。 2. 抽象类要被子类继承,接口要被子类实现。 3. 接口只能做方法的声明,抽象类可以做方法的声明,也可以做方法的实现。 4. 接口里定义的变量只能是公共的静态常量,抽象类中定义的变量是普通变量。 5. 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类的抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如果不能全部实现接口方法,那么该类只能是抽象类。 6. 抽象方法只能声明,不能实现。接口是设计的结果,抽象类是重构的结果。 7. 抽象类里可以没有抽象方法。 8. 如果一个类里有抽象方法,那么该类只能是抽象类。 9. 抽象方法要被实现,所以不能是静态的,也不能是私有的。 10. 接口可以继承接口,并可多继承接口,但类只能单继承。(重要啊) 11. 接口中的常量:有固定的修饰符-public static final(不能用private和protected修饰/本质上都是static的而且是final类型的,不管加不加static修饰)。 12. 接口中的抽象方法:有固定的修饰符-public abstract 。

设计模式学习02

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-31 04:52:23
3.1 结构型模式 3.1.1 适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。 实际就是解决接口不兼容的问题,可以通过第三方的类来解决这个问题。具体实现:适配类实现新接口,重写方法,在重写的方法中调用老接口实现类的方法,完成新老接口的适配操作 3.1.2 桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。 实际是将抽象和实现进行分离,两者之间是关联关系而不是继承关系,抽象类和实现类独立,做到低耦合。 3.1.3 过滤器模式 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern

2020-01-29

拜拜、爱过 提交于 2020-01-30 07:31:46
自己的一些面试总结 线程 多线程 线程的创建方式 1.继承Thread类创建线程 2.实现Runnable接口创建线程 3.使用Callable和future创建线程 4.使用线程池例如用Executor框架 线程怎么启动 Thread.start();//开启线程 Thread.run();当普通方法的方式调用 线程的状态(就绪、运行、阻塞、结束) 1.新建状态:当用new操作符创建一个线程时,线程还没有开始运行,此时线程处在新建状态 2.就绪状态:一个新创建的线程并不自动开始运行,要执行线程,必须调用线程start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态 3.运行状态 当线程获取cpu时间后,他才进入运行状态,真正开始执行run()方法 4,阻塞状态:线程运行过程中,肯峨眉号各种原因进入阻塞状态; sleep方法进入睡眠状态 线程在等待某个触发条件 线程的同步 同步就是发出一个功能调试时,在没有得到结果之前,该调用就不返回或继续执行后续操作。 异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。 线程、进程的区别 线程和进程都是一个时间段的描述,是cpu工作时间段的描述。 进程的颗粒太大

c#基础语言编程-多态

南笙酒味 提交于 2020-01-29 15:51:55
语言中的多态性是为了使程序有扩展性,为实现多态性,在程序中体现为接口、抽象类、父类、具体类。 接口就是一种规范,解决了多重继承的问题,类似一种规范,告诉我要做什么,具有什么能力,在接口中定义写行为属性。 接口的特性 接口类类似抽象类,不能实例化接口;接口中的方法都是抽象方法,继承于此接口的非抽象类必须实现接口中所有成员。 接口只能包含方法(属性、事件、索引器最终都是方法),不能有字段、常量、构造函数和析构函数、静态变量,但是可以有委托和事件。 接口中成员不许有访问修饰符,默认为public,手动添加会编译出错。 接口中成员只有定义,没有任何实现,像抽象类一样 实现接口的类,直接实现接口中的方法,不用写override。 当显示该接口的成员时,实例成员不能通过类实例访问(不提倡用类实例访问,这样就无法体现多态性),只能通过接口实例访问,显示实现默认是private。当隐示实现接口成员,两者实例都能访问,但是要将成员表示为public。 比如: public class Person : IFace1, IFace2 { public void Fly() { Console.WriteLine("实现了IFace1中的Fly方法。"); } //显示实现接口的访问修饰符默认是没有的,类中成员没有写访问修饰符这默认就是private /

java_9:抽象类和抽象方法

社会主义新天地 提交于 2020-01-29 13:46:52
一、abstract关键字的使用 1.abstract可以可以用来修饰的结构:类、方法 2.abctract修饰类——抽象类 》此类不能实例化 》 抽象类中一定有构造器 ,便于子类实例化时调用(类中一定会有构造器) 》开发中,都会提供抽象类的子类,让子类实例化,完成相关操作 3.abstract修饰方法——抽象方法 》抽象方法只有方法的声明,没有方法体 》包含抽象方法的类一定是抽象类,反之,抽象类中可以没有抽象方法 》若子类重写了父类的所有抽象方法,子类方可实例化 若子类没有重写父类所有的抽象方法,则此子类也是一个抽象类,需要用abstract修饰 public abstract Person{//抽象类 abstract public void eat();//抽象方法 } 二、abstract使用上的注意点 (1)abstract不能用来修饰属性、构造器等结构 (2)abstract不能用来修饰私有方法(不能被重写),静态方法(static方法不能被重写)、 final的方法(不能被重写)、final的类(不能被继承) (3)一定会用到继承 三、抽象类的匿名子类 好处:省事,如果子类只用一次,就不用再单独造一个出来 Person p=new Person(){//创建匿名子类的非匿名对象 @Override public void eat() { System.out