黑马程序员_Java基础_面向对象
2014-08-04 15:50
281 查看
---------------------- 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
plaincopy
class BaseClass
{
public int book = 6;
public void base()
{
System.out.println("父类的普通方法");
}
public void test()
{
System.out.println("父类的被覆盖的方法");
}
}
public class SubClass extends Basclass
{
public String book = "我的学习笔记"; //覆盖父类的book
public void test()
{
System.out.println("子类的覆盖父类的方法");
}
public static sub()
{
System.out.println("子类的普通方法");
}
public static void main(String[] args)
{
BaseClass bc = new BaseClass(); //不存在多态
System.out.println(bc.book); //输出6
bc.base();
bc.test(); //执行父类中的方法
SubClass sc = new SubClass(); //不存在多态
System.out.println(sc.book); //输出我的学习笔记
sc.base();
sc.test();
BaseClass PloymorphicBc = newSubClass(); //多态发生
System.out.println(PloymorphicBc.book); //这里输出6,对象的变量不具备多态性
PloymorphicBc.base(); //执行从父类继承到的方法
PloymorphicBc.test(); //执行子类中的方法
}
}
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类不可以有子类
内部类
一个类的定义放在另一个类的内部,这个类就叫做内部类。
public class First {
public class Contents{
public void f(){
System.out.println("In Class First's inner Class Contents method f()");
}
}
}
Contents就叫做内部类,内部类了解外围类,并能与之通信。
如果内部类里的一个成员变量与外部类的一个成员变量同名,可以使用outherClass.this来避免冲突。
静态内部类:和普通的类一样,内部类也可以有静态的。不过和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。
在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这一切。
局部内部类:定义在一个方法甚至一个代码块之内的类,定义在方法中的内部类可以使设计多样化。
匿名内部类:只需要创建一个类的对象而且用不上它的名字时,使用匿名内部类。匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。
抽象类和抽象方法
包含抽象方法的类只能被定义成抽象类,抽象类里也可以没有抽象方法;抽象类不能被实例化,抽象类里可以包含一般类的成员,其构造函数不能用于创建实例,主要用于被子类调用,在子类中必须完全实现父类中包含的抽象方法,否则子类也只能被定义成抽象类
抽象方法不能有方法体
主要关键字和常用方法:
final:用于修饰变量、类和方法,表示他们不可以被改变。
abstract:修饰抽象类或抽象方法;需要注意的是abstract不能修饰field、局部变量、构造器,且永远不能和final同时使用
interface:
equals:是object提供的实例方法,所有引用变量都可以调用该方法用来判断是否与其他应用变量相等。用法和==相似,但是该方法可以重写
==:如果是基本类型且是可以转换成基本数值类型的变量可以用来对比是否相等,但对于引用变量只有当他们指向同一个对象的时候才认为相等。
implements:
System.gc():
toString:一个自我描述的方法,调用该方法返回对象实现类的“类名+@+hashCode”值,该方法可以被重写。
---------------------- 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
plaincopy
class BaseClass
{
public int book = 6;
public void base()
{
System.out.println("父类的普通方法");
}
public void test()
{
System.out.println("父类的被覆盖的方法");
}
}
public class SubClass extends Basclass
{
public String book = "我的学习笔记"; //覆盖父类的book
public void test()
{
System.out.println("子类的覆盖父类的方法");
}
public static sub()
{
System.out.println("子类的普通方法");
}
public static void main(String[] args)
{
BaseClass bc = new BaseClass(); //不存在多态
System.out.println(bc.book); //输出6
bc.base();
bc.test(); //执行父类中的方法
SubClass sc = new SubClass(); //不存在多态
System.out.println(sc.book); //输出我的学习笔记
sc.base();
sc.test();
BaseClass PloymorphicBc = newSubClass(); //多态发生
System.out.println(PloymorphicBc.book); //这里输出6,对象的变量不具备多态性
PloymorphicBc.base(); //执行从父类继承到的方法
PloymorphicBc.test(); //执行子类中的方法
}
}
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类不可以有子类
内部类
一个类的定义放在另一个类的内部,这个类就叫做内部类。
public class First {
public class Contents{
public void f(){
System.out.println("In Class First's inner Class Contents method f()");
}
}
}
Contents就叫做内部类,内部类了解外围类,并能与之通信。
如果内部类里的一个成员变量与外部类的一个成员变量同名,可以使用outherClass.this来避免冲突。
静态内部类:和普通的类一样,内部类也可以有静态的。不过和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。
在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这一切。
局部内部类:定义在一个方法甚至一个代码块之内的类,定义在方法中的内部类可以使设计多样化。
匿名内部类:只需要创建一个类的对象而且用不上它的名字时,使用匿名内部类。匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。
抽象类和抽象方法
包含抽象方法的类只能被定义成抽象类,抽象类里也可以没有抽象方法;抽象类不能被实例化,抽象类里可以包含一般类的成员,其构造函数不能用于创建实例,主要用于被子类调用,在子类中必须完全实现父类中包含的抽象方法,否则子类也只能被定义成抽象类
抽象方法不能有方法体
主要关键字和常用方法:
final:用于修饰变量、类和方法,表示他们不可以被改变。
abstract:修饰抽象类或抽象方法;需要注意的是abstract不能修饰field、局部变量、构造器,且永远不能和final同时使用
interface:
equals:是object提供的实例方法,所有引用变量都可以调用该方法用来判断是否与其他应用变量相等。用法和==相似,但是该方法可以重写
==:如果是基本类型且是可以转换成基本数值类型的变量可以用来对比是否相等,但对于引用变量只有当他们指向同一个对象的时候才认为相等。
implements:
System.gc():
toString:一个自我描述的方法,调用该方法返回对象实现类的“类名+@+hashCode”值,该方法可以被重写。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流!
----------------------
相关文章推荐
- 黑马程序员——Java基础之面向对象(3)——第九篇
- 黑马程序员---Java基础--08天(面向对象之三多态)
- 黑马程序员_Java基础_面向对象(概述、类与对象关系、成员变量、封装private、构造函数和构造代码块、this关键字)
- 黑马程序员:java基础学习——面向对象
- 黑马程序员_Java基础_面向对象(内部类、异常1)
- 黑马程序员——Java基础之面向对象(4)——第十篇
- 黑马程序员_Java基础_面向对象(异常2、练习题、导包)
- 黑马程序员____基础____java的面向对象
- 黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)
- 黑马程序员-----笔记整理(java基础五-------面向对象--多态)
- 黑马程序员-Java语言基础–面向对象 第9天
- 黑马程序员-Java语言基础–面向对象 第5天
- 黑马程序员_Java基础_面向对象(继承、子父类变量和函数以及构造函数特点、final关键字、抽象类、模版方法模式、接口)
- 黑马程序员——Java基础之面向对象(1)——第七篇
- 黑马程序员---Java基础--07天(面向对象之三)
- 黑马程序员-Java语言基础 –面向对象 第7天
- 黑马程序员-Java语言基础–面向对象 第8天
- 黑马程序员-----java基础三(之面向对象)
- 黑马程序员_Java基础_面向对象(多态、Object类相关方法)
- 黑马程序员_java编程基础10面向对象