java笔记基础4.docx

上传人:b****6 文档编号:8115286 上传时间:2023-01-28 格式:DOCX 页数:25 大小:317.53KB
下载 相关 举报
java笔记基础4.docx_第1页
第1页 / 共25页
java笔记基础4.docx_第2页
第2页 / 共25页
java笔记基础4.docx_第3页
第3页 / 共25页
java笔记基础4.docx_第4页
第4页 / 共25页
java笔记基础4.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

java笔记基础4.docx

《java笔记基础4.docx》由会员分享,可在线阅读,更多相关《java笔记基础4.docx(25页珍藏版)》请在冰豆网上搜索。

java笔记基础4.docx

java笔记基础4

兄弟连笔记_基础4

41.代码块2

Ø1.普通代码块2

Ø2.构造块2

Ø3.静态块3

42.单例设计模式5

43.继承6

1.继承的基本概念6

2.继承的语法7

3.继承的限制8

4.子类的实例化过程8

5.方法的重写9

6.Super关键字11

7.继承的应用11

44.Final关键字12

45.抽象类13

1.抽象类的基本概念13

2.抽象类的语法13

46.接口15

1.接口的概念15

2.接口的定义15

3.接口的使用规则16

47.多态性17

1.多态性的概念(多种形态)17

2.多态性的两种情况17

3.对象的多态性18

4.多态性小结19

48.Instanceof关键字19

1.语法格式:

19

2.父类的设计原则21

49.抽象类应用21

50.接口应用23

41.代码块

Ø1.普通代码块:

直接写在方法中的代码块,作用域只在最近的{}内,出来{}则不执行

Ø2.构造块:

构造块只在构造对象时执行,在构造对象时调用在类中的代码块,先于构造方法执行.

Ø3.静态块:

在类加载时执行,只执行一次,这个要先于构造块执行

publicclassCodedemo{

//构造块

{

System.out.println("我是构造块");

}

publicCodedemo(){

System.out.println("我是构造方法");

}

//静态块

static{

System.out.println("我是静态块");

}

publicstaticvoidmain(String[]args){

Codedemocd1=newCodedemo();

//普通代码块

{

Stringinfo="今天天气好晴朗,处处好风光";

System.out.println(info);

}

//两个info作用域不一样,不会产生冲突

Stringinfo="今天天气好晴朗,处处好风光,应该出去散步了";

System.out.println(info);

}

}

42.单例设计模式

定义:

保证一个类仅有一个实例,并提供一个访问它的全局访问点

Ø构造方法私有化

Ø声明一个本类对象

Ø给外部提供一个静态方法获取对象实例

两种实现方式:

1.饿汉式(先定义本类对象并实例化),实际用的多

2.懒汉式(后定义本类对象并实例化),在多线程访问时会有安全问题,但可以改进

//单例设计模式

publicclassSingleton{

publicstaticvoidmain(String[]args){

Singleton1s=Singleton1.getInstance();

s.print();

Singleton1s1=Singleton1.getInstance();

System.out.println(s==s1);

Singleton2s2=Singleton2.getInstance();

s2.print();

}

}

把该类设计成单例设计模式

饿汉式

classSingleton1{

//先定义一个本类对象并实例化

privatestaticSingleton1s=newSingleton1();

//构造方法私有化

privateSingleton1(){}

publicstaticSingleton1getInstance(){

returns;

}

publicvoidprint(){

System.out.println("饿汉式-单例设计模式");

}

}

把该类设计成单例设计模式

懒汉式

classSingleton2{

//先定义一个本类对象为空

privatestaticSingleton2s=null;

//构造方法私有化

privateSingleton2(){}

publicstaticSingleton2getInstance(){

if(s==null){

s=newSingleton2();

}

returns;

}

publicvoidprint(){

System.out.println("懒汉式-单例设计模式");

}

}

43.继承

1.继承的基本概念

●继承是面向对象的三大特征之一

●被继承的类叫父类(超类),继承父类的类叫子类(派生类)

●继承是指一个对象直接使用另一个对象的属性和方法

●通过继承可以实现代码重用

2.继承的语法

语法:

[访问权限]class子类名extends父类名

{

类体定义;

}

示例:

PublicclassDog{

ProtectedStringname;

}

PublicclassHomeDogextendsDog{

//类的定义

}

3.继承的限制

●Java只能实现单继承,也就是一个类只能有一个父类

●允许多层继承,即:

一个子类可以有一个父类,一个父类还可以有其他的父类

●继承只能继承非私有的属性和方法

●构造方法不能被继承

4.子类的实例化过程

子类在进行实例化操作时,首先会先让其父类进行实例化操作,(调用其默认构造方法,)之后再自己进行实例化操作

/**继承的基本概念

*非私有的:

public(公有的)default(默认的)protected(保护型)(专门为继承使用)

*访问修饰符:

public(公有的)private(私有的)default(默认的)protected(保护型)

子类的实例化过程:

子类的实例化是会先调用父类的默认构造方法

如果父类中没有默认构造方法,在子类的构造方法中必须显示的调用父类构造方法用super调用*/

publicclassExtendsDemo{

publicstaticvoidmain(String[]args){

HomeChickenhc=newHomeChicken();

hc.desc();

System.out.println("------------");

Pheasantp=newPheasant("小白");

p.desc();

}

}

//父类(超类)

classChicken{

Stringname;

/**默认构造方法

publicChicken(){

System.out.println("Chicken");

}*/

//带一个参数的构造方法

publicChicken(Stringname){

System.out.println("Chicken:

"+name);

}

publicvoiddesc(){

System.out.println("我是一只鸡");

}

}

//子类(家鸡)继承了父类的desc方法

classHomeChickenextendsChicken{

publicHomeChicken(){

super("小白");//super表示父类的引用,调用父类的构造方法语句必须是第一句

System.out.println("HomeChicken");

}

}

//子类(野鸡)继承了父类的desc方法

classPheasantextendsChicken{

publicPheasant(Stringname){

super(name);

this.name=name;

System.out.println("Pheasant");

}

}

5.方法的重写

1 方法重写(overidingmethod)

在java中,子类可继承父类中的方法,而不需要重新编写相同的方法.有时子类并不想原封不动继承父类的方法.而是想做一定的修改,这就需要采用方法的重写,方法重写又称方法覆盖

关于方法重写的一些特性:

v发生方法重写的两个方法返回值.方法名.参数列表必须完全一致(子类重写父类的方法)

v子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)

v子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)

2 属性重写

在继承关系中,除了方法可以进行覆写之外,属性也是可以进行覆盖操作

注:

该操作在实际应用中不会使用,了解即可

//方法重写

publicclassOveridingmethod{

publicstaticvoidmain(String[]args){

HomeDoghd=newHomeDog("小白");

hd.desc();//此时调用的是子类中的desc

Dogd=newDog("小黑");

d.desc();//调用的是父类中的desc

}

}

//父类

classDog{

protectedStringname;

publicDog(Stringname){

this.name=name;

}

protectedvoiddesc(){

System.out.println("mynameis:

"+name);

}

}

//子类

classHomeDogextendsDog{

publicHomeDog(Stringname){

super(name);//调用父类中的属性

}

//desc方法的重写时

publicvoiddesc(){

System.out.println("我是:

"+name);

}

}输出结果:

我是:

小白

mynameis:

小黑

 

6.Super关键字

Ø使用super可以调用父类中的属性

Ø使用super可以调用父类中的方法

Ø使用super可以调用父类中的构造方法

publicclassSuperKeyWordDemo{

publicstaticvoidmain(String[]args){

BlackDuckbd=newBlackDuck("小白",300);

bd.desc();

}

}

classDuck{

protectedStringname;

protectedintprice;

publicDuck(Stringname,intprice){

this.name=name;

this.price=price;

}

publicvoidcount(){

System.out.println("mypriceis:

"+price);

}

}

classBlackDuckextendsDuck{

publicBlackDuck(Stringname,intprice){

super(name,price);//调用父类构造方法

}

publicvoiddesc(){

System.out.println("我是一只黑鸭子:

"+super.name);//调用父类属性

super.count();//调用父类方法

}

}

7.继承的应用

见Kiss2ExtendsDemo1.java

见Kiss2ExtendsDemo2.java

44.Final关键字

/**final关键字

*1.final声明一个类.该类不能被继承

*2.final声明一个方法.该方法不能被子类重写

*3.final声明一个常量,用final修饰的属性为常量

*(值不能改变)

*常量的赋值:

1.在声明的同时赋值

*2.通过构造方法赋值

publicclassFinalKeyWordDemo{

publicstaticvoidmain(String[]args){

}

}

classGril{

finalStringname="小白";//在声明的同时赋值

finalStringsex;

publicGril(Stringsex){

this.sex=sex;//通过构造方法赋值

}

publicfinalvoiddesc(){

System.out.println("我是"+name);

}

}

45.抽象类

1.抽象类的基本概念

●很多具有相同特征和行为的对象可以抽象为一个类;很多具有相同特征和行为的类可以抽象为一个抽象类

●使用abstract关键字声明的类为抽象类

2.抽象类的语法

声明一个抽象类

PublicabstractclassWomen{

privateStringname;

publicabstractvoidsay();//抽象方法

}

抽象类的规则:

Ø抽象类可以没有抽象方法,有抽象方法的类必须是抽象类

Ø非抽象类继承抽象类必须实现所有抽象方法

Ø抽象可以有方法实现和属性

Ø抽象类不能被实例化

Ø抽象类不能被声明为final

Ø可以调用父类的构造方法,但此时的构造方法并不代表实例化对象

publicclassAbstractClassDemo{

publicstaticvoidmain(String[]args){

Goddessg=newGoddess();

g.setName("咪咪");

g.say();

UglyWomenu=newUglyWomen();

u.setName("小白");

u.say();

}

}

abstractclassWomen{

privateStringname;

//构造方法:

此时的构造方法并不代表实例化对象

publicWomen(){

System.out.println("我是women");

}

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetName(){

returnname;

}

publicabstractvoidsay();//抽象方法(只有声明,没有实现)

}

classGoddessextendsWomen{

//实现父类的抽象方法

publicvoidsay(){

System.out.println("我是女神,我是"+getName());

}

}

classUglyWomenextendsWomen{

//实现父类的抽象方法

publicvoidsay(){

System.out.println("我是丑女,但是我无敌,我是"+getName());

}

}

46.接口

1.接口的概念

Ø接口是一组行为的规范.定义,没有实现

Ø使用接口,可以让我们的程序更加利于变化

Ø接口是面向对象编程体系中的思想精髓之一

Ø面向对象设计法则:

基于接口编程

2.接口的定义

接口的定义格式:

Interface接口名称{

全局变量;

抽象方法;

}

示例:

InterfaceHit{

publicvoidcry();

}

接口的实现

ClassGoddessimplementsHit{

publicvoidcry(){

//

}

}

接口的实现

ClassGirlimplementsHit{

publicvoidcry(){

//

}

}

3.接口的使用规则

✧接口可以继承多个接口(类只能单继承)

✧一个类可以实现多个接口

✧抽象类实现接口可以不实现方法

✧接口中的所有方法的访问权限都是public

✧接口中定义的属性都是常量

✧接口不能被实例化

//接口

publicclassInderfaceDemo{

publicstaticvoidmain(String[]args){

}

}

interfaceA{}

interfaceB{}

interfaceIEat{//定义接口时按习惯来说,一般前面加I,一目了然

publicvoideat();

}

//定义一个接口

//1.接口可以继承多个接口,用逗号隔开

interfaceHitextendsA,B{

//5.在接口中定义的属性都是常量

publicstaticfinalStringNAME="小白";/

//此时的NAME是一个常量,接口中的常量名一般都全大写,publicstaticfinal可以省略

publicabstractvoidcry();//抽象方法,没有实现publicabstract可以省略,默认是public//4.接口中所有方法的访问权限都是public

}

//2.一个类可以实现多个接口方法,用逗号隔开

classNvshenimplementsHit,IEat{

//实现接口必须实现接口中的所有方法

publicvoidcry(){

System.out.println("疼死了");

}

publicvoideat(){

System.out.println("一小口");

}

}

classGirlimplementsHit{

//实现接口必须实现接口中的所有方法

publicvoidcry(){

System.out.println("你妹啊");

}

}

//3.抽象类实现接口可以不实现方法

abstractclassPersonimplementsHit{

}

47.多态性

1.多态性的概念(多种形态)

✧多态性是面向对象的三大特征之一

✧什么是多态性

2.多态性的两种情况

✧方法的重载和重写

✧对象的多态性

3.对象的多态性

✧对象的多态性是从多个继承关系中的多个类而来

✧向上转型:

将子类实例转为父类实例

✧格式:

父类父类对象=子类实例;→自动转换

以基本数据类型操作为例:

inti=‘a’;

(因为char的容量比int小.所以可以可以自动完成)

✧向下转换:

将父类实例转为子类实例

以基本数据类型操作为例:

chara=(char)97;

因为整型是4个字节比char2个字节要大,所以需要强制完成

publicclassPolymorphismDemo{

publicstaticvoidmain(String[]args){

//自动转换(向上转换)

//父类就是大,子类就是小

Personman=newMan();//父类的引用指向子类对象

man.say();//say方法在父类中必须有,此处的say方法是子类对象中的

Personwomen=newWomen();

women.say();

//manwomen属于person的两种形态

//强制转换(向下转换)

Manm=(Man)man;//此处man指的是person

m.say();

//此时编译没问题,但是运行会出错,因为women和man是同一级,都是子类

//没有父子关系的两种类型不能强制转换

Manm1=(Man)women;

}

}

abstractclassPerson{//人有两种不同的形态

privateStringname;

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetName(){

returnname;

}

publicabstractvoidsay();//抽象方法,没有实现

}

classManextendsPerson{

publicvoidsay(){

System.out.println(";ujl;sdkf");

}

}

classWomenextendsPerson{

publicvoidsay(){

System.out.println("ysojskhhshkd");

}

✧}

4.多态性小结

✧方法的重载和重写就是方法的多态性的表现

✧多个子类就是父类中的多种形态

✧父类引用可以指向子类对象,自动转换

✧子类对象指向父类引用需要强制转换(注意:

类型不对会报异常)

✧在实际开发中尽量使用父类引用(更利于扩展)

48.Instanceof关键字

1.语法格式:

✧对象instanceof类型--返回boolean类型值

✧该语句一般用于判断一个对象是否为某个类的实例,是返回true,否返回false

publicclassPolymorphismDemo{

publicstaticvoidmain(String[]args){

Manman=newMan();

say(man);

Womenw=newWomen();

say(w);

}

/**这种静态方法被上面调用时仅用于少量子类

publicstaticvoidsay(Manm){

m.say();

}

publicstaticvoidsay(Womenw){

w.say();

}*/

/**利用多态性解决多子类问题,供以上两类调用

publicstaticvoidsay(Personp){

p.say();

}*/

//用来调用Women中的getangry方法

publicstaticvoidsay(Personp){

p.say();

//判断P对象是否属于Women实例

if(pinstanceofWomen){

Womenw=(Women)p;

w.getangry();

}

}

}

abstractclassPerson{//人有两种不同的形态

privateStringname;

publicvoidsetName(Stringname){

t

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1