黑马程序员_Java基础_面向对象

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
Java是面向对象的程序设计语言,支持面向对象的三大特征:封装,继承,和多态
类和对象
1、类是某一批对象的抽象,可以把类理解成某种概念;对象才是一个具体存在的实体。比如日常所说的某个人就是人类的某个实例。
类的定义方法:
修饰符 class 类名
{
零到多个构造器
零到多个成员变量
零到多个方法
}
对象的产生:person p=new person() ;
2、对象、引用和指针
类也是一种引用数据类型,因此程序中某个类的变量实际上都是一个引用,
引用指向这个类的对象,当一个对象被建立了以后都只能通过引用来访问他们。
3、方法
方法是类或对象的行为特征的抽象,方法是类或对象最重要的组成部分。方法不能独立存在,所有的方法必须定义在类里。
1、方法的参数传递机制:将实际参数的值的副本(复制品)传入方法内,而参数本身不受任何影响。
2、方法的重载:一个类里定义多个同名方法,只要形参列表不同就发生重载。
3、隐藏和封装
封装是指将对象的状态信息隐藏在对象内部,不允许外部直接访问,从而提高程序的安全性。
使用访问控制符实现封装:
private:当前类访问权限
default:包访问权限
protected:子类访问权限;可以被同一个包中的其他类访问,也可以被不同包中的子类访问
public:公共访问权限;最宽松的级别

4、构造器
构造器是一个特殊的方法,用于创建实例时执行初始化。创建对象的重要途径。
默认情况下如果没有为类提供任何构造器,那么系统会自动为类提供一个无参数的构造器。类里至少包含一个构造器
构造器和方法一样可以重载

6、类的继承
继承是软件复用的重要手段,Java具有单继承的特点,每个子类只有一个父类。通过extends关键字来实现。
修饰符 class Subclass extends SuperClass
类定义部分
注意部分
子类一旦继承了父类就可以使用父类的所有功能,但不能选择性的继承父类的部分功能。
子类总是以父类为基础额外增加新的成员和方法。
子类也可以重写父类的方法:只要在子类中和父类中同名的方法,子类方法会覆盖(或叫重写)父类的方法。
子类不会获得父类的构造器,但是在子类构造器里可以调用父类的构造器的初始化代码
7、多态
java引用变量有两个类型:一个是编译时类型,一个是运行是类型。编译时类型有声明该变量使用的类型决定,
运行时类型有实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致就可以能出现多态。
Java中,实现多态有以下方法:抽象类,接口,重载,覆盖,继承。
注意:与方法不同对象的field不具备多态性。子类对象赋给父类变量时,调用该引用变量的方法时,
其方法总是表现出子类方法的行为特征。
多态的发生现象如:
多态的发生现象如:
1、引用类型的强制类型转换:
2、把子类变量赋给父类变量
实例代码:
         
[java]   view plain copy
  1. class BaseClass  
  2. {  
  3.     public int book = 6;  
  4.     public void base()  
  5.     {  
  6.         System.out.println("父类的普通方法");  
  7.     }  
  8.     public void test()  
  9.     {  
  10.         System.out.println("父类的被覆盖的方法");  
  11.     }  
  12. }  
  13.   
  14. public class SubClass extends Basclass  
  15. {  
  16.     public String book = "我的学习笔记";  //覆盖父类的book  
  17.     public void test()  
  18.     {  
  19.         System.out.println("子类的覆盖父类的方法");  
  20.   
  21.     }  
  22.     public static sub()  
  23.     {  
  24.         System.out.println("子类的普通方法");  
  25.     }  
  26.   
  27.     public static void main(String[] args)  
  28.     {  
  29.         BaseClass bc = new BaseClass();  //不存在多态  
  30.         System.out.println(bc.book);        //输出6  
  31.         bc.base();  
  32.         bc.test();              //执行父类中的方法  
  33.       
  34.         SubClass sc = new SubClass();   //不存在多态  
  35.         System.out.println(sc.book);        //输出我的学习笔记  
  36.         sc.base();            
  37.         sc.test();  
  38.         BaseClass PloymorphicBc = newSubClass();        //多态发生  
  39.         System.out.println(PloymorphicBc.book);         //这里输出6,对象的变量不具备多态性  
  40.         PloymorphicBc.base();       //执行从父类继承到的方法  
  41.         PloymorphicBc.test();       //执行子类中的方法  
  42.     }  

8、初始化块
与构造器类似,可以对对象进行初始化操作。初始化块优先构造器先执行

这部分主要关键字汇总:
static:修饰方法、成员等;表示修饰的内容属于类的本身,随着类的存在而存在
this:总是指向调用该方法的对象。
super:用来在子类中调用父类被覆盖的方法,访问父类中被隐藏的实例变量
instansof运算符:判断前面的对象是否是后的类或者子类、实现类的实例如果是,返回true,否则返回false。


包装类

1、基本数据类型包装类

java中共有8种基本数据类型,因为它们的变量不能当成Object类型的变量所以java提供了包装类概念,为它们分别定义了引用类型。

对应关系:除int对应Integer类,char对应character类之外其他的都是基本类型的第一个字母大写。

2、理解final修饰符

final成员变量:变量一旦有了初始值就不能被重新赋值,如果没有在定义和初始化块或构造器中为其赋值,那么该变量将一直是系统分配的默认值而失去意义。

java语法规定:final成员变量必须由程序员显式指定初始值

final局部变量:局部变量也必须由程序员显式初始化,但是和系统不会对局部变量初始化,所以可以在定义时指定值也可以不指定默认值,可以在后面的代码中再指定值,但是只能指定一次。

final修饰基本类型变量和引用类型变量的主要区别:

修饰基本类型变量时,不能对基本类型变量重新赋值,但对于引用变量它保存的只是一个引用final只保证引用的地址不变,而其指向的对象是可以被改变的

final方法:final方法不可以被重写

final类:final类不可以有子类

内部类

一个类的定义放在另一个类的内部,这个类就叫做内部类

  1. public class First {  
  2. public class Contents{  
  3.     public void f(){  
  4.     System.out.println("In Class First's inner Class Contents method f()");  
  5.     }  
  6. }  
  7.  } 
Contents就叫做内部类,内部类了解外围类,并能与之通信。

如果内部类里的一个成员变量与外部类的一个成员变量同名,可以使用outherClass.this来避免冲突。

静态内部类:和普通的类一样,内部类也可以有静态的。不过和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。

在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这一切。

局部内部类:定义在一个方法甚至一个代码块之内的类,定义在方法中的内部类可以使设计多样化。

匿名内部类:只需要创建一个类的对象而且用不上它的名字时,使用匿名内部类。匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。

抽象类和抽象方法

包含抽象方法的类只能被定义成抽象类,抽象类里也可以没有抽象方法;抽象类不能被实例化,抽象类里可以包含一般类的成员,其构造函数不能用于创建实例,主要用于被子类调用,在子类中必须完全实现父类中包含的抽象方法,否则子类也只能被定义成抽象类

抽象方法不能有方法体

主要关键字和常用方法:

final:用于修饰变量、类和方法,表示他们不可以被改变。

abstract:修饰抽象类或抽象方法;需要注意的是abstract不能修饰field、局部变量、构造器,且永远不能和final同时使用

interface:

equals:是object提供的实例方法,所有引用变量都可以调用该方法用来判断是否与其他应用变量相等。用法和==相似,但是该方法可以重写

==:如果是基本类型且是可以转换成基本数值类型的变量可以用来对比是否相等,但对于引用变量只有当他们指向同一个对象的时候才认为相等。

implements:

System.gc():

toString:一个自我描述的方法,调用该方法返回对象实现类的“类名+@+hashCode”值,该方法可以被重写。


----------------------  ASP.Net+Android+IOS开发 .Net培训 、期待与您交流! ----------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值