面向对象
1、面向对象的三大特征:
(1)封装:使用方法把类的数据隐藏起来,达成对类的封装,让普通类型上升为对象级,封装控制用户对类的修改和访问数据的程度,增强了程序的可维护性。
(2)继承:发生在类与类之间,可分为单继承和多层继承,一旦使用了继承,子类便可直接获得父类的所有的成员,但是父类的私有属性和方法不能获得。
(3):多态:使代码具有灵活性和重用性。
2、类和对象的关系:
类必须通过对象才可以使用,那么对象的所有操作都在类中定义。
类:是由属性和方法组成的。属性就相当于一个个的特征,方法就相当于人的行为。
定义对象的格式:类名称 对象名称 = new 类名称();
首先定义对象名称,没有实例化对象名称时,对象只是保存在栈内存中,实例化之后才给对象开辟新的空间,保存在堆内存中。
调用类的属性和方法:
对象名称.类属性 对象名称.类方法
3、封装:
(1)如果没有封装,类的对象可以直接对类的属性和方法进行操作,所有,在开发过程中,要对类的属性进行封装,private;
(2)封装后,要想继续对类的属性进行操作,类中必须有set和get方法,然后对象才能继续对类中的属性进行操作。
(3)构造方法:构造方法是在类中定义的,构造方法的定义格式:方法名称与类名称相同,无返回值类型的声明。在使用new实例化类对象的时候都会用到构造方法,如果没有写构造方法,系统对自动生成一个无参的构造方法。有了构造方法,实际上构造方法的主要作用是为类中的属性初始化的,所以可以通过构造方法进行属性内容的设置,这样以后就可以不用再分别调用setter 方法设置属性内容。例如:public 类名称(String name,int age){this.name = name;this.age = age;} 类名称 对象 = new类名称(“wangwu”,12);
(4)匿名对象:匿名表示没有名字的对象;此对象只能使用一次,因为没有任何的对象引用,所以将称为垃圾;只使用一次的对象可以通过匿名对象的方式完成,这一点在以后的开发中将经常使用到。
4、String 类:
(1)String 的两种赋值方式:一种是直接赋值,String name = “wangwu”;一种是使用关键字new赋值,String name = new String(“wangwu”);
(2)字符串的比较:数字进行比较,应用==进行比较,字符串进行比较用==的话,是比较的地址值,应用equals进行字符串的比较,比较内容的值。通过new的方式赋值的话,对在堆内存中开辟两个空间,一个将成为垃圾,而直接赋值的话,只会开辟一个空间,并且如果其他字符串对象声明的内容是完全一样的,则将不会再重新开辟新的内存空间,而是指向已有的内存空间。所以在开发的时候一般使用直接赋值,而使用关键字new赋值很少使用。
(3)判断是否以指定的内容开头或者结尾:public boolean startsWith(String prefix) 判断开头是否以“String prefix”开头;public boolean startsWith(String prefix,int toffset) 判断字符串的第int toffset位置是否以String prefix开头;public boolean endsWith(String suffix)判断是否以String suffix结尾。
(4)字符串的替换public String replace(char oldChar,char newChar) 替换制定的字符。public String replaceAll(String regex,String replacement) 替换指定的字符串
(5)字符串的截取:public String substring(int beginIndex) 从指定位置开始一直截取到末尾;public String substring(int beginIndex,int endIndex) 截取指定范围的字符串。
(6)字符串的拆分:public String[] split(String regex)按照指定的字符串进行拆分;public String[] split(String regex,int limit) 按照指定的个数拆分字符串。
(7)字符串的查找:public boolean contains(String s) 判断字符串是否存在;
(8)数组的长度:数组长度:数组名称.length;字符串的长度:字符串长度:字符串.length(),表示调用的是一个方法。
5、this关键字:
使用this 关键字可以完成以下的操作:1、调用类中的属性;2、调用类中的方法或构造方法;3、表示当前对象。
6、继承:
一个子类只能继承一个父类,但是可以多层继承,一个子类可以继承一个父类,一个父类可以再继承一个父类,继承父类时应用exdents关键字,在继承的时候,子类只是继承了父类的非私有化的操作,在子类进行实例化操作的时候,首先会让父类进行实例化操作,之后子类再进行实例化操作,在进行子类对象的实例化之前会首先默认调用父类中的无参构造方法,为父类中的属性进行初始化操作,之后再调用子类自己的构造方法完成子类的初始化操作;在子类中可以利用super来确定应用父类的哪个构造方法。
7、方法的复写:
在子类中声明了与父类中同名的方法称为覆写,在进行方法的覆写时必须注意以下一个问题,被覆写的方法不能拥有比子类更严格的访问权限。
在使用子类对象操作的时候,调用的方法永远是被子类覆写过的方法。
8、super关键字:
使用super可以完成以下的操作:1、使用super 调用父类中的属性;2、使用super 调用父类中的方法;3、使用super 调用父类中的构造方法。
9、final关键字:
使用final可以完成以下对的操作:1、使用final 关键字声明一个类;2、使用final 关键字声明一个方法3、使用final 关键字声明一个常量。
使用final 关键字声明的类不能有子类。
使用final 关键字生命的方法不能被复写。
使用final 关键字声明的变量即成为常量,常量在声明的时候必须为其赋值。
10、抽象类:
抽象类也必须使用abstract class声明。一个抽象类中可以没有抽象方法,抽象方法必须卸载抽象类或者接口中
抽象方法:只声明没有实现的方法叫抽象方法。抽象方法必须使用abstract关键字声明。
在使用抽象类时的原则:
抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new 完成。
一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写抽象类中的全部抽象方法。
11、接口:
如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接口。
格式:interface 接口名称{
全局常量;
抽象方法;
}
但是接口要注意一下几点:
1、接口中的所有方法的访问权限都是public。
2、接口本身都是由全局常量和抽象方法组成。
3、在开发中一个抽象类可以实现多个接口,但是一个接口不能继承一个抽象类。
12、多态性:
实际上的面向对象的多态性可以分为两种:方法的覆写与重载,另外就是向上转型和向下转型
向上转型:父类 父类对象 = new 子类;向上转型可以自动完成,并且执行的是子类覆写父类的方法。
向下转型:父类 父类对象 = new 子类; 子类 子类对象 = 父类对象;
如果一个对象要想进行向下转型之前,必须首先发生向上转型操作。建立关系。
在实际的开发中,一个子类永远不要去继承一个已经完全实现好的类,要
么继承抽象类,要么实现接口,此一原则将直接决定类设计的和好坏。
面向对象的概括
最新推荐文章于 2020-05-05 19:57:41 发布