43java重点概念继承重写重载抽象类接口作用域superthisfinal.docx

上传人:b****4 文档编号:4411824 上传时间:2022-12-01 格式:DOCX 页数:14 大小:33.77KB
下载 相关 举报
43java重点概念继承重写重载抽象类接口作用域superthisfinal.docx_第1页
第1页 / 共14页
43java重点概念继承重写重载抽象类接口作用域superthisfinal.docx_第2页
第2页 / 共14页
43java重点概念继承重写重载抽象类接口作用域superthisfinal.docx_第3页
第3页 / 共14页
43java重点概念继承重写重载抽象类接口作用域superthisfinal.docx_第4页
第4页 / 共14页
43java重点概念继承重写重载抽象类接口作用域superthisfinal.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

43java重点概念继承重写重载抽象类接口作用域superthisfinal.docx

《43java重点概念继承重写重载抽象类接口作用域superthisfinal.docx》由会员分享,可在线阅读,更多相关《43java重点概念继承重写重载抽象类接口作用域superthisfinal.docx(14页珍藏版)》请在冰豆网上搜索。

43java重点概念继承重写重载抽象类接口作用域superthisfinal.docx

43java重点概念继承重写重载抽象类接口作用域superthisfinal

main方法仅仅是程序的入口,并不需要非得在public类中,或者任何哪一个类中。

类与类之间是并列的同等关系,main方法可以在任意一个类中。

类的三种变量:

实例变量(成员变量)

静态变量

局部变量

publicclassTest

{

publicstaticintage;

publicstaticvoidmain(String[]args)

{

System.out.println(age);

}

publicvoidprint()

{

System.out.println(age);

}

}

**只要不是局部变量,初值可以不给定

---------------------------------

继承:

基准类BaseClass父类

classAnimal{

publicStringname;

publicintage;

publicvoideat()

{

System.out.println(this.name+"正在吃");

}

}

根据不同的动物分类,创建其子类

**当父类在某一些场景满足不了特性的时候,子类就是对其扩展

extends关键字

**子类可以访问父类任意允许访问的资源

**java里面只允许单继承

//多态2(常用的多态)

狗类继承动物类

classDogextendsAnimal

{

}

Dogdog=newDog();

dog.eat();//能调用成功

-----------------------

Animaldog=newDog();?

DogisaAnimal

Animaldog=newDog();

dog.swim();//子类的方法不能调用到

Animaldog=newDog();

Dogd=(Dog)dog;

d.swim();//强制类型转换,是因为只有Dog类型才有swim方法

---------------------------------------------------------

一只猫能不能转成一只狗?

Cat和Dog的父类都是Animal,但是没有其他内在联系,不支持强转

如果不同类型之间强转,报类型转换异常:

ClassCastException

--------------------------------------------------------------------------

Strings=null;

s.indexOf("abc");//编译过,但是运行报空指针异常NullPointerException

-----------------------------------------------------------------------------

1、重载(也是一种多态2):

overload;

方法名相同,参数的类型和个数不能一样,返回值类型可以不同。

**默认情况下,100表示整型,所以如果想传入其他数字类型加L

100L-->long

2、重复定义

在同一个类中两个方法的方法名相同,参数的个数和类型也相同,返回值类型可以不同。

-----------------------------------------------------------------------------------

3、重写:

override;

只会发生在继承关系中,方法名,参数完全一致,返回值类型必须和父类相同。

如果重写了方法,如何调用父类的方法呢?

有个关键字super-->代表父类对象名

this---代表子类对象名

Super和this不能定义在静态方法中,因为它们代表的是对象名。

**重写方法作用域不能比原先的小!

Protected--------public√

重写的二义性:

Static修饰的方法被实例方法重写,会有二义性;同样,实例方法被static修饰的方法重写,也会产生二义性。

所以static修饰的方法只能被static方法重写。

父类引用指向子类对象:

1.如果父类中的变量和子类中的变量相同,默认调用的是父类中的变量;

2.但是如果父类中的方法和子类中的变量方法(重写),默认调用的是子类中的变量。

------------------------------------------------------------------------------------

publicclassTest{

publicstaticvoidmain(String[]args){

intx=5;

booleanb1=true;

booleanb2=false;

//如果改成X=4,则在java中语法不能通过。

Java和C语言不一样,C语言if后面非0即真(4非0就是真),而java后要么true要么false

if((x==4)&&!

b2)

System.out.print("l");

System.out.print("2");--2

if((b2=true)&&b1)--3

System.out.print("3");

}

}

publicclassA{

publicvoiddoit(){

}

publicStringdoit(){//重复定义错!

return“a”;

}

publicdoubledoit(intx){

return1.0;

}

}

1、怎么看类加载?

static块,只要类加载到虚拟机,必定会有静态区,所以static的部分一定会被执行

static

{

System.out.println(……);

//在static中写的代码都是静态字段

}

2、如何查看对象已创建?

构造方法

创建对象时必定会调用构造函数,该类以及该类的父类(包含Object类)构造函数在类对象被创建时自动被调用。

创建的原则:

有父才有子,构造方法一一对应

PublicclassA{}

publicclassBextendsA{};

1、A(){}----------------B(){}//系统自动生成,默认自动子继父。

2、重写构造方法

A(){}----------------B(){}//保留无参构造,保留的无参构造函数系统还会默认子继父,可以不用super。

A(T1){}--------------B(T1)){superA(T1)}//重写构造函数后,需手动子继父;

默认情况下,有系统自动有一个无参构造方法,为了初始化所以有时需要定义有参构造方法,但是重写构造方法后原来默认的无参构造方法不将存在,最好手动再写一遍无参构造方法,方便对象的创建,父基类重写构造方法后系统默认的父子自动承建关系就会断了,所以在子类需要重写相应的构造方法,并且手动构造父类构造方法!

Dogd=newDog(20);

**如果只有有参构造,新建对象的时候就不能使用无参构造方式

**如果希望使用无参构造方式创建对象,一定要保留无参构造

**构造方法也是有重载;

-----------------------------------------------------------------------------------------------

publicclassA{

publicstaticvoidtest()

{

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

}

}

publicclassBextendsA{

}

**static修饰的方法被重写的时候,也只能是static的,否则会报错。

**父类是实例方法,子类的重写不能是static

**只有方法才有重载和重写,变量没有!

-------------------------------------------------------------------------------------------------

classA{

publicinti=10;

}

classBextendsA{

}

Bb=newB();

System.out.println(b.i);--10因为可以引用父类的资源

---------------------------------------

classA{

publicinti=10;

}

classBextendsA{

publicinti=20;

}

Bb=newB();

System.out.println(b.i);20

Aa=b;

System.out.println(a.i);10

**Aa=b;会根据A类型去找对应的实例变量

classA

{

publicstaticintj=100;

}

classBextendsA

{

}

Bb=newB();

System.out.println(b.j);-->100

Aa=b;

System.out.println(a.j);-->100

classA

{

publicstaticintj=100;

}

classBextendsA

{

publicstaticintj=200;

}

Bb=newB();

System.out.println(b.j);-->200B.j

Aa=b;

System.out.println(a.j);-->100A.j

-----------------------------------------

Java的三大特性:

封装继承多态

----------------------------------------

javaIDE(java集成开发环境)常见的几种:

NetBeans

Eclipse

MyEclipse-->Eclipse商业版

工作区(workspaces):

包含很多个JAVA工程(包含很多JAVA源代码)

里面有两个目录:

bin:

存放编译好的.class文件

Src:

存放java源文件.java

-----------------------------------------------------------

作用域

本类同包子孙类其他位置

public****

protected***//子类权限

friendly(不写)**//包权限

private*//类权限

方便记忆的顺序:

private(类权限)、protected(子类权限)

Friendly(包权限)

---------------------------------------------------------------------------------------------------------------------------

包:

package

类型:

Strings="abc"等价于java.lang.Strings="abc"

Java.lang包由jdk自动默认导入,所以在使用java.lang包里面的类时不需要写全包名。

其他包手动导入才能不写全包名直接使用,否则需要写全包名。

---------------------------------

this

super

public

private

protected

class

static

----------------------------------------------------------------------------------------------------------------

final关键字

final能修饰类,变量,方法

如果使用final修饰,表示值不能变化

1、final修饰类:

表示该类不能被继承

2、final修饰变量:

变量值只能被赋值一次

3、final修饰方法:

该方法不能被重写

**如何创建一个常量PIpublicstaticfinaldoublePI=3.14

Static规定了该变量只能在内存中存在一份;

Final规定了该变量只能被赋值,不能被修改。

----------------------------------------------------------------------------------------------------------

**所有类的父类是java.lang.Object

Object类中三个常见的方法:

toString():

打印对象,System.out.println(b1),结果是该对象在内存中的位置;一般需要重写

equals():

比较对象的内容是否相等。

b1.equals(b2);

b1==b2:

比较的是两个对象的地址是否相等,而不是实体。

hashcode():

返回对象的hash值,作为对象的唯一标识。

Clone():

复制一个对象。

------------------------------------------------------------------------------

遛狗原理

publicclassPerson{

privateStringname;

privateintage;

}

Objectp=newPerson();//new出一个对象A用p指向

p=newPerson();//又new出一个对象B用p指向,则对象A将没有引用指向,成为疯狗(一块没有意义的内存区域)。

System.gc();-->系统垃圾回收。

可以手动调用,如果不手工调用JVM在一定时间后也会自动调用垃圾回收机制,处理疯狗。

 

遛狗原理的应用:

1、在大量引用类型数据被循环复制的时候,遛狗原理能显著的提到性能。

它通过改变引用,使引用类型原来指向的对象成为疯狗,能及时被java的内存机制回收。

2、JAVA内存回收机制

垃圾回收的时候,如果对象被回收,那么finalize()一定会被调用,这可以查看一个对象是否被回收,重写finalize()。

3、建立一个集合List(在一个数组中存放多种数据类型),灵活使用遛狗原理和Object。

Object和BigDecimal(任意精度的十进制数)的关系(中间件,可以向其它类型强制转换)。

练习:

1、如何使一个数组既可以保存String,Person,int,long?

?

Object[]arr=newObject[10];

2、保存每一个对象到arr中,希望实现容量无上限?

a.重新创建一个数组比原来的更大

b.原来的数据得保存进来,新的数据也保存进来

publicclassTList{

privateintcount=4;

privateintcurrent_index=0;

privateObject[]arr=newObject[4];

publicvoidpush(Objecto)

{

//考虑下标如果越界怎么办?

if(current_index>=count)

{

Object[]arr2=newObject[count*2];

//原来的数据要保存进来

for(inti=0;i

{

arr2[i]=arr[i];

}

//当前的篮子要指向正确的对象

arr=arr2;//遛狗原理

count=arr.length;

}

arr[current_index]=o;

current_index++;

}

publicObjectget(intindex)

{

returnarr[index];

}

}

TListlist=newTList();

Strings="abc";

list.push(s);

Stringo=(String)list.get(0);//父类向子类类型转换,需要强制类型转换

o.charAt

(2);

----------------------

数组不适合大数据量的删除操作

----------------------------------------------------------------------------------------------------------

普通类、抽象类、接口的区别:

对用户的自由开发代码的权限程度不同

普通类:

不用自己编写,直接引入类创建对象实例化;

抽象类:

部分方法是抽象类,需要根据自己的需求实现;

接口:

所有的方法都是抽象类,全部都要自己来实现。

抽象类:

将一系列比较公共的特性放到单独的一个类里面,抽象类中可以有抽象方法、实现方法、和实例变量。

抽象方法不需要实现,只需要声明。

举例:

做一个开户,转账

init();

doBusiness();

destroy();

publicabstractclassBusiness{//抽象类

publicabstractvoidinit();//抽象方法

publicvoidtest()

{

......

}

}

publicclassNewSubscriberextendsBusiness{

publicvoidinit(){

....1234

}

}

publicclassTransferextendsBusiness{

}

**抽象类和普通类有什么区别?

1、抽象类可以有抽象方法,普通类不行

2、普通类可以自定义创建对象,但是抽象类不能创建对象。

抽象类和普通类的共同点?

1、都可以有实现方法

千万不要在抽象类上面加final,private修饰,因为抽象类需要被子类继承,并且实现抽象类中的抽象方法。

---------------------------------------------------------------------------------------------------------------

接口:

定义一系列的标准,抽象出来,它比抽象类更加抽象。

**接口里面不能有实现方法,必须全部都是抽象方法,所有的变量都是常量

publicinterfaceT1{

publicinti=10;//publicstaticfinalinti=10;

publicvoidtest();//publicabstractvoidtest();

}

接口中的所有变量都被JVM默认修饰为staticfinal类型,所有的变量都是常量;

接口中的所有方法都被JVM默认修饰为abstract类型,所有的方法都是抽象方法。

需要实现接口

publicclassTimplementsT1,T2,T3….//多实现

{

//必须实现所有的抽象方法

}

**抽象类和接口的区别?

抽象类里面可以有实现方法,接口不行

抽象类可以有实例变量,接口不行,接口里面都是常量

java支持多实现,但是只支持单继承!

---------------------------------------------

Myeclipse的调试方式:

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

当前位置:首页 > 解决方案 > 学习计划

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

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