Java&Android学习总结(1)

1.     Java知识

本章节介绍Java的一般语法知识,以及面向对象的继承,封装,多态的基本实现方法。

1.1.           构造函数

构造函数没有返回值;并且可以重载;不会被重载。

class Person{

Person(){

}

Person(sting name, int age){

}

}

1.2.           this

指的是对象的那个成员变量。一般new了一个对象后,通过在class中使用this可以访问到new出来的对象的那些成员变量。

通过this可以为不同的对象做当前对象的成员访问进行控制。

1.3.           static

a.       静态成员变量:static string name

所有new出来的对象都使用同一个成员变量,一改全改。

b.      静态函数static void funcA()

静态函数只能访问静态成员变量,不能访问非静态变量。

c.       静态代码块

Static{

 

}

静态代码块没有名字,如何调用?作用是什么呢?

静态代码块无需调用,装载该类的时候执行,主要作用是为静态变量赋初始值。

1.4.           继承

class Student extends Person{

}

Java只支持单继承。一个子类只能继承一个父类,一个父类可以被多个子类继承。

目的是将没有区别的代码定义在父类中,将区别的内容新定义一个类,实现分别的功能。

减少重复代码。

1.5.           子类的实例化过程

a.       生成子类的过程

子类的构造函数中,必须先调用父类的构造函数。自己不写,编译器会自动加入无参数的构造函数。

自己写代码,则通过super()来实现。至于怎么调用,则有super()的参数决定

子类为什么必须调用父类的构造函数呢?构造函数为对象分配空间,子类不调用父类的构造函数,如何分配空间,没有空间也就没有办法进行访问。

b.      使用super调用父类的方法

使用super()调用可以访问父类的构造函数,以消除重复代码。

super(name, age); 子类调用父类的构造函数。

必须要是调用函数的第一条语句。

原因:为了解决子类无法继承父类的构造函数,通过super实现子类访问父类的构造函数的功能。

 

1.6.           函数的复写

overwrite。在具有父子关系的两个类当中,子类定义一个与父类完全相同的函数(函数名,返回值,参数列表),覆盖父类对应的函数。这样在new对象时,将调用子类的方法。

overload比较:重载是在同一个类当中,定义一些类函数名称相同其他不同的函数,这样就是重载。

应用:对继承到的父类的方法,有不满意的话,可以通过复写来实现自己的方法。

 

通过super实现子类调用父类的成员函数。super.eat()

应用:当复写时,如果发现自己只是在父类基础上增加一些功能,可以先调用super.eat()实现部分功能,然后再实现自己的功能。

1.7.           对象的转型

对象的多态性的体现。

a.       概念:向上转型:将子类的对象赋值给父类的引用。一定成功。

Student student = new Student();

Person person = stu;

使用方法:

一个引用能够调用哪些成员(函数&方法)取决于这个引用的类型

比如,stu转成了per以后,per不能调用stu下的方法。

转型后调用重载的函数:

一个引用调用的是哪一个方法取决于这个引用的指向

比如,per调用introduce方法,父子类都有的方法,就执行子类的方法。

 

b.      概念:向下转型:将父类的对象赋值给子类的引用。不一定成功。

先把一个对象向上转型,在强制进行向下转型。

Student student 1 = new Student();

Person person = student;

Student student 2 =( Student) person;

使用方法

一个引用能够调用哪些成员(函数&方法)取决于这个引用的类型

1.8.           抽象类和抽象方法

a.       抽象类

abstract Person{

        string name;

 

        abstract void eat();

}

 

注意:

·         一个类当中,拥有一个或多个抽象函数必须被定义为抽象类。基于本限制,子类可以复写父类的抽象函数。

·         抽象类不能生成对象,抽象类天生就是当爹的,用来被继承。

·         如果有一个类,不想让别人生成对象,可以将其定义为抽象类。

·         抽象类为基类,最基础的类。

·         抽象类可以有构造函数因为存在super访问的问题,没有构造函数,如何实现访问super成员变量抽象类提供构造函数为子类访问。

 

b.      抽象函数:只有函数的定义,没有函数体的函数。

abstract  int eat();

问题:抽象函数没有函数体,调用时候执行什么呢?

解答:由于抽象类不能生成对象,只能用来被继承,子类通过复写父类的抽象函数,让自己没有抽象函数,从而实现可以进行生成对象。

基于此说法,父类定义抽象函数,可以实现规定子类必须实现某些方法

 

c.       抽象类的作用。

定义一些必须实现的方法,保证在编译的语义上防止子类漏实现必须的功能。

1.9.           软件包的权限问题

a.       package关键字

class放置到一个包中,使用package关键字实现;实际在编译时使用-d来实现指定编译。访问有package的需要具体指定该class的路径执行。

这样,其实一个类的实际的名字就是helloworld.test

包名的命名:包名的字母必须小写;一般情况下为域名倒过来写(如org.honeuwell.person定义了类)。

一个类的全名:包名+类名。

b.      权限问题

如果两个类,不在一个包当中,必须写类的全路径。Default

·         Public:解决两个类不同包中的问题。

如果两个类不在统一个包中,没有定位仪public,则两外一个包中无法访问该类。

在一个包的外部调用一个类的方法或成员变量,必须把一个类的方法或成员变量定义为public

·         Private:只能在当前的class中使用,不能外部使用。

一般情况只能修饰变量和方法。

·         Default

为同一个包中的访问,不同包是不行的。继承后,子类是不能访问

·         Protected

该字段主要与继承相关。

如果子类与父类不在同一个包中,子类无法继承到父类的default成员变量和方法?实际应该是可以继承到,不能访问是因为权限不够。

只能修饰成员变量与方法,可以实现跨包访问。

public相比,public为包外部所有的class都可以访问,而protected在包外部只有子类能够使用该成员变量和方法。

c.       Import

可以使用import关键字导入一个类,如:import org.android.mypackage.*

1.10.       接口

a.       定义&语法

·         使用interface定义。

Interface USB{

Public  void plugin();

}

·         接口中的方法全部为抽象方法,访问权限为public

·         使用implement关键字实现类似类继承的操作。在class中在实现对接口中的抽象方法进行实现。

·         一个类可以实现多个接口,一个类只能继承一个父类。

Class Phone implement USB, WiFi{

 

}

·         一个接口可以继承多个接口。

Interface A extend B, C{

 

}

b.      应用

结合着接口的特性,接口的应用场景也就很好理解。

对比静态工厂模式的实现。

到这里,可以部分地理解设计模式的定义与产生的原因。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值