java程序中单方法接口通常是,图灵学院Java开发笔记

第2章 Java面向对象编程

18_一个案例了解多态的实际意义

多态的分类:特定的(强制的,重载的)、通用的(参数的,包含的)

(3)参数的多态

参数多态允许把许多类型抽象成单一的表示。例如,在一个名为List的抽象类中,描述了一组具有同样特征的对象,提供

了一个通用的模板。我们可通过制定一种类型以重用这个抽象类。这些参数可以是用户定义的类型,很多用户都可以使用

这个抽象类,因此参数多态毫无疑问称为最强大的多态

多态的意义在于:可以屏蔽不同子类差异性编写通用的代码,从而产生不同的效果

案例:

形状:横坐标、纵坐标

矩形:长度、宽度

写一个方法既能打印矩形又能打印圆形

TestShape.java

public static void draw(Shape s){

//在编译阶段调用Shape类的show()方法,在运行阶段调用子类重写的show()方法

//虽然看似调用同一个show()方法,但是根据实参的不同最终调用不同的版本带来不同的结果

s.show();

}

public static void main(String[] args){

Rect r = new Rect(1,2,3,4);//矩形,Rect为Shape子类

TestShape.draw(r);//不同的参数将会调用不同子类中的show方法

Circle c = new Circle(5,6,7);//圆形,Circle为Shape子类

TestShape.draw(c);

}

public class TestSubAbstract extends TestAbstract{

public static void main(String[] args){

//子类的引用指向子类自己的对象

TestSubAbstract ts = new TestSubAbstract();

//子类的引用只能调用自己的show()方法

ts.show();

//父类的引用指向子类的对象,形成多态

TestAbstract ta = new TestSubAbstract();

//在编译阶段调用父类的show()方法,在运行阶段调用子类重写父类以后的方法

ta.show();

}

}

19_抽象类

抽象方法

抽象方法就是指不能被具体实现的方法,也就是没有方法体,并且使用abstract关键字修饰;

语法格式:

访问修饰符 abstract void show();

抽象类

抽象类就是指使用abstract关键字修饰的类,抽象类不能实例化对象

抽象方法只能定义在抽象类之中,如

public abstract TestAbstract{

. . .

. . .

public abstract void show();//抽象方法没有方法体,因此不能够有大括号

}

//抽象类就是用来继承的,如果抽象类之中有方法体,则要重写这个方法体

public class TestSubAbstract extends TestAbstract{

. . .

. . .

@Override

public void show() { . . . }

}

注意事项

1.抽象类中可以有成员变量、成员方法以及构造方法;

2.抽象类中可以有抽象方法也可以没有;

3.拥有抽象方法的类必须是抽象类,因此通常情况下认为拥有抽象方法并且有abstract关键字修饰的类才认为是真正

的抽象类;

实际意义

抽象类的意义不在于实例化,而在于被击成,若一个类继承自抽象类则必须重写抽象方法,否则该类也得变抽象类

因此,抽象类对子类具有强制性和规范性,叫做模板设计模式

经验分享:

在以后的开发中推荐使用父类指向子类的对象形式,因为父类引用直接调用的方法一定是父类拥有的方法,当

需要更换指向子类对象的时候,只需要将new后面的方式类型更改一下就可以了,其他的代码无需改动,因此

提高了代码的可维护性和可扩展性。

该方式的缺点在于:父类引用不能直接调用子类独有的方法,若调用则需要强制类型转换。

20_接口

基本概述

接口就是一种比抽象类还抽象的类,该类型不能实例化对象

定义类的关键字是class,而定义接口的关键字是interface

继承类的关键字是extends,而定义接口的关键字是implements

当多个类型之间具有相同的行为能力的时候,java中就可以通过接口来进行类型之间的联系。

当通过接口可以解决java中单继承所带来的一些类型无法共享的问题

接口定义了某一些规范,并且需要去遵守

接口不关心类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供的某些方法。

语法格式

修饰符 interface 接口名称 [extends 父接口1,父接口2,......]{

零个到多个常量的定义........

零个到多个抽象方法的定义........

零个到多个默认方法定义.......(jdk1.8新特性)

零个到多个静态方法的定义........(jdk1.8新特性)

}

注意事项

1.接口可以实现多继承,也就是说一个接口可以同时继承多个父接口

2.实现结果的类如果不能实现所有接口中待重写的方法,则必须设置为抽象类

3.一个类可以继承一个父类,同时实现多个接口

4.接口中的所有成员变量都必须public static final共同修饰,也就是常量

5.接口中的所有成员变量都必须有public abstract共同修饰,也就是抽象方法

类和接口之间的关系

类和类之间采用继承的关系使用extends关键字支持单继承

类与接口之间采用实现的关系 使用implements关键字 支持多实现

接口与接口之间采用继承的关系使用extends关键字通常认为支持单继承

抽象类和接口的主要区别(笔试题)

1.定义抽象类的关键是class,而定义接口的关键字是interface

2.继承抽象类关键字extends,而实现接口关键字implements

3.继承抽象类支持单继承,而实现接口支持多实现

4.抽象类有构造方法,但是接口没有

5.接口中所有的成员变量都必须是常量,而抽象类中可以是变量

6.接口中的成员方法都必须是抽象方法,而抽象类中的成员方法可以是普通方法

7.接口中增加方法一定影响子类,而重抽象类中可以不影响

接口中的常量为什么必须使用public static final修饰

public 作用是修饰符,是公开的,也就是说接口的实现类可以使用这个变量

static 修饰就是表示类的,随着类的加载而存在的,如果不是static的话,就表示属于对象的,只有创建对象才能有它

而接口是不能创建对象的,所以接口的常量定义必须为static

final 修饰就是保存接口定义的常量不能被实现类去修改,如果没有final的话,由子类随意修改,接口建立常量将没

意义

21_内部类之成员内部类与局部内部类

a2141523d67b13f43e6e20abdb192f2b.png

基本概述

当一个类的定义放在另一个类的实体时,则该类叫做内部类,该类所在的类叫做外部类

在一个类体重可以出现的内容:成员变量、成员方法、构造方法、构造块、静态语句块、静态变量、方法、内部类

嵌套类:

内部类(成员内部类、局部内部类、匿名内部类)

静态嵌套类

语法格式

class 外部类类名{

class 内部类类名{

内部类的类体;

}

}

成员内部类

成员内部类定义在另一个类或接口中的内部类

注意事项:

1.必须先创建外部类对象才能创建成员内部类对象

2.不能含有静态变量、静态代码块、静态方法(除了静态常量)

3.外部类可以通过成员内部类的对象调用内部类私有成员

4.成员内部类是一个独立的类,编译成独立的.class文件

作用:

成员内部类既可以访问外部类信息,又可以访问父类信息,从而使多继承的解决方案变得完整

//演示成员内部类的使用

public class Outer {

private String str = "Outer类的str1";

private String str2 = "Outer类的str2";

/*

第一:内部类名称不能于外部类重名

第二:可以使用final、方法修饰符修饰

*/

public class Inner{

private String str = "Inner类的str1";

private String str2 = "Inner类的str2";

public void show(){

//内部类的成员优先于外部类的成员

System.out.println(str);

System.out.println(str2);

//使用"外部类名.this.成员"访问外部类的成员

System.out.println(Outer.this.str2);

}

}

}

public class TestOuter{

public static void main(String[] args){

//如果要创建内部类,那么在此之前需要先创建外部类对象

//创建外部类对象

Inner inner = o.new Inner();

inner.show();

}

}

局部内部类

局部内部类是定义在方法或者代码块里的内部类

注意事项:

1.不能含有静态变量、静态代码块、静态方法

2.只能在定义该类的方法或者代码块中使用,必须在使用前定义

3.访问它所有方法的局部变量的时候,局部变量必须是有效的常量

4.是一个独立的类,编译成独立的.class文件

5.只能使用abstract、final修饰

6.定义静态块或方法时候,只能访问外部类的静态成员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值