java学习——java基础(一)之概念解析

来源:互联网 发布:linux ant是什么 编辑:程序博客网 时间:2024/05/20 05:28

写在前面:本人研究生刚毕业小白一枚,研究生期间习惯使用nyfedit记录学习笔记,签约华为,无奈软件岗被分配到硬件维护,故重新温习下笔记并重新开始新的征程。

言归正传,今天主要回顾下java中基础部分:

1.函数的重载和重写

函数重载的定义:在同一个类中,有一个以上的同名函数,只要函数的参数列表或参数类型不一样即可,与返回值无关, 这些统称为方法的重载。
函数重载存在原因:为了增强方法的阅读性,优化了程序设计。

重载示例:

class OverloadDemo{    void test(){        System.out.println("No parameters");    }    void test(int a,int b){        System.out.println("a:"+ a +" b:"+ b );    }}

函数重写的定义:在继承中,子类可以定义和父类相同的名称且参数列表一致的函数,将这种函数称之为函数的重写.
函数重写的特点:当子类重写了父类的函数,那么子类的对象如果调用该函数,一定调用的是重写过后的函数。

重写示例:

public class A {    public void a(){        System.out.println("a");    }}class B extends A{    public void a(){        System.out.println("b");        super.a();//证明没有删除父类的同一个方法    }}



注意:
(1)可以通过super关键字进行父类的重写函数的调用。
(2)继承可以使得子类增强父类的方法
(3)函数名必须相同、参数列表必须相同。
(4)子类重写父类的函数的时候,函数的访问权限必须大于等于父类的函数的访问权限否则编译报错
(5)子类重写父类的函数的时候,返回值类型必须是父类函数的返回值类型或该返回值类型的子类。不能返回比父类更大的数据类型

2.面向对象和面向过程

面向过程:强调的是功能行为,面向过程”是一种以过程为中心的编程思想。就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向过程在这一系列工作的执行中,强调的是工作的执行。
面向对象:是一种以事物为中心的编程思想。


3.匿名对象


没有名字的实体,也就是该实体没有对应的变量名引用。例:new Car().run(); new Car().num=5;

4.面向对象特性


封装:将所有的成员变量封装加上private,提供get、set方法
解决办法:设置get和set方法

继承:继承是描述类和类之间的关系
解决办法:使用extends关键字实现

多态:就是一个对象的多种状态。
表现:父类引用变量指向了子类的对象,父类引用也可以接受自己的子类对象
要点:父类和子类有相同的成员变量,多态下访问的是父类的成员变量。
当父类和子类具有相同的非静态方法(就是子类重写父类方法),多态下访问的是子类的成员方法。
当父类和子类具有相同的静态方法(就是子类重写父类静态方法),多态下访问的是父类的静态方法。

编译时多态和运行时多态的区别?
编译时的多态:是指参数列表的不同,来区分不同的函数,在编译后,就自动变成两个不同的函数名。在运行时谈不上多态。
运行时多态:用到的是后期绑定的技术,在程序运行前不知道,会调用那个方法,而到运行时通过运算程序动态的算出被调用的地址。动态调用在继承的时候,方法名、参数列表完全相同时才出现运行时多态。运行时多态,也就是动态绑定,是指在执行期间(而非编译期间)判断所引用对象的实际类型,根据实际类型判断并调用相应的属性和方法。

5.抽象类和接口


抽象类:当描述一个类的时候,如果不能确定功能函数如何定义,那么该类就可以定义为抽象类,功能函数应该描述为抽象函数。使用abstract修饰。
     特点: 有抽象函数的类,该类一定是抽象类。
抽象类中不一定要有抽象函数。
抽象类不能使用new创建对象
抽象类主要为了提高代码的复用性,让子类继承来使用。
编译器强制子类实现抽象类父类的未实现的方法。可以不实现,前提是子类的也要声明为抽象的。
抽象类可以没有抽象方法(java.awt.*的类就是这样子操作的)。
抽象类可以继承普通类与抽象类。
抽象类不能直接使用类名创建实例,但是有构造方法,构造方法是让子类进行初始化。
抽象类一定有构造方法。
     优点: 提高代码的扩展性,便于后期的代码维护
提高代码复用性
强制子类实现父类中没有实现的功能

接口:主要是使用来拓展定义类的功能,可以弥补java中单继承的缺点。
     特点: 类实现接口可以通过implements实现,实现接口的时候必须把接口中的所有方法实现,一个类可以实现多个接口。
接口中定义的所有的属性默认是public static final的,即静态常量既然是常量,那么定义的时候必须赋值。
接口中定义的方法不能有方法体。接口中定义的方法默认添加public abstract。
有抽象函数的不一定是抽象类,也可以是接口类
由于接口中的方法默认都是抽象的,所以不能被实例化
对于接口而言,可以使用子类来实现接口中未被实现的功能函数
如果实现类中要访问接口中的成员,不能使用super关键字。因为两者之间没有显示的继承关系,况且接口中的成员属性是静态的,可以使用接口名直接访问。
接口没有构造方法
接口与接口之间的关系是继承,接口可以多继承接口

区别
(1)抽象类中可以有构造方法,接口中不能有构造方法.
(2)抽象类中可以有普通成员变量,接口中没有普通成员变量.
(3)抽象类中可以包含非抽象的方法,接口中的方法都是抽象的,不能有非抽象的方法.
(4)抽象类中的方法可以是public ,protected 和默认的,接口中的方法只是public abstract(默认就是这种类型,可以不写).
(5)抽象类中可以包含静态方法,接口中不能包含静态方法.
(6)抽象类和接口中都可以包含静态成员变量,抽象类的静态成败变量的访问类型可以任意,但接口中定义的变量只能是public static final 类型的,并且默认即为这种类型.
(7)一个类只能继承一个抽象类,但可以实现多个接口.
(8)接口多用于系统架构设计方面,如定义模块之间的通信协议.而抽象类主要用于系统代码重用方面,将子类共同的代码放在抽象类中去实现,而由子类去实现各自不同的功能.


6.内部类


优势:成员内部类作为外部类的成员,那么可以访问外部类的任意成员。

什么情况使用内部类:当我们分析事物时,发现事物的内部还有具体的事物,这时则应该定义内部类了。

成员内部类的访问方式:内部类可以直接访问外部类的成员属性。外部类需要访问内部类的成员属性时需要创建内部类的对象。

成员内部类访问细节:私有的成员内部类不能在其他类中直接创建内部类对象来访问。如果内部类中包含有静态成员,那么java规定内部类必须声明为静态的访问静态内部类的形式:Outer.Inner in = new Outer.Inner(); 

局部内部类概述:包含在外部类的函数中的内部类称之为局部内部类。

局部内部类访问:可以在包含局部内部类的方法中直接创建局部内部类的对象调用局部内部类的成员。

局部内部类注意:局部内部类只能访问所在函数的final属性。

匿名内部类的前提:必须继承一个父类或者是实现一个接口。

匿名内部类的格式: new 父类或者接口(){ 执行代码….};

为什么要引入内部类?还有匿名内部类?
java通过内部类加上接口,可以很好的实现多继承的效果。当你只需要创建一个类的对象而且用不上它的名字时,使用匿名内部类可以使代码看上去简洁清楚。

匿名内部类也就是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写,但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

Runnable接口匿名类实现示例:
public class Demo {    public static void main(String[] args) {        Runnable r = new Runnable() {            public void run() {                for (int i = 1; i <= 5; i++) {                    System.out.print(i + " ");                }            }        };        Thread t = new Thread(r);        t.start();    }}




原创粉丝点击