------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
面向对象三个特征: 封装,继承,多态。
封装性:
封装性将尽可能对外界公布一个有限的界面,而将其细节隐藏起来,与其他对象的交往通过这个界面进行,这就是封装性。
因此,可以用private将属性封装起来,也可以用private封装函数,其语法如下:
封装属性:private 属性类型 属性名
封装函数:private 函数返回类型 函数名称(参数)
注意:用private声明的属性或函数只能在其类的内部被调用,而不能在类的外部被调用。
继承性:
Java继承的特征
(1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
(3)继承提供了功能。若软件复用类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
JAVA不支持多重继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。
实现继承的格式如下:
class 子类名 extends 父类
Java类的继承可用下面的语法来表示:
class 父类 //定义父类
{}
class 子类 extends 父类 //用extends 关键字实现类的继承
{}
多层继承的语法如下
<pre class="java" name="code"> class A {} class B extends A {} class C extends B {}
从代码可以看出,类B继承了类A,而类C又继承了类B,也就是说类B是类A的子类,而类C则是类A的孙类。
子类对象的实例化过程:
子类对象在实例化会默认先去调用父类中的无参构造方法,之后在调用本类中的相应的构造方法。看一下代码可知:
class Person
{
String name ;
int age ;
// 父类的构造函数
public Person()
{
System.out.println("1.public Person(){}") ;
}
}
class Student extends Person
{
String school ;
// 子类的构造函数 public Student()
{
System.out.println("2.public Student(){}");
}
}
public class TestPersonStudentDemo1
{
public static void main(String[] args)
{
Student s = new Student() ;
}
}
打印结果为:1.public Person(){}
1.public Person(){}
super关键字的使用 super的主要功能是完成子类调用父类中的内容,也就是调用父类中的属性或方法。 super关键字不仅可以用来调用父类中的构造方法,也可以用于调用父类中的属性或方法,其格式如下:super.父类中的属性; super.父类中的方法(); 注意:用super语句调用父类中的构造方法,只能放在程序的第一行。 覆写 “覆盖(重写)”的概念和“重载”相似,均是Java“多态”的技术之一。 “重载”就是方法名称相同。 当一个子类继承一个父类,而子类中的方法与父类中方法的名称、参数个数、类型等都完全一致时,就称子类中的这个方法覆盖了父类中的方法。同理,如果子类中重复定义了父类中已有的属性,则称此子类中的属性覆盖了父类中的属性。例如看以下代码:class Person
{
String name ;
int age ;
public String talk()
{
return "我是:"+this.name+",今年:"+this.age+"岁";
}
}
class Student extends Person
{
String school ;
public Student(String name,int age,String school)
{
// 分别为属性赋值
this.name = name ;
this.age = age ;
this.school = school ;
}
// 此处覆写Person中的talk()方法
public String talk()
{
return "我在"+this.school+"上学" ;
}
}
class TestOverDemo1
{
public static void main(String[] args)
{
Student s = new Student("张三",25,"北京") ;
// 此时调用的是子类中的talk()方法
System.out.println(s.talk()) ;
}
}
类的多态 概念::一个对象变量可以指向多种实际类型的现象。 1.多态的体现 父类的引用指向了自己子类的对象 父类的引用也可以接收子类的对象
2.多态的好处 多态的好处大大提高了程序的扩展性 3.多态的前提 必须是类与类之间的关系,要么继承,要么实现,通常还有一个前提,那就是存在覆盖 4.多态的弊端 提高了扩展性,但是只能使用父类的引用访问父类中的成员 多态的转型: 父类对象通过子类对象去实例化,这就是向上转型,但是向上转型会丢失精度。 父类的对象可以转换为子类的对象,这时必须要进行强制的类型转换,这就是向下转型。 在多态中成员函数的特点: 在编译时期,参数引用类型变量所属的类中是否有调用的方法,如果有,编译通过,如果没有,编译失败 在运行时期,参数对象所属的类中是否有调用的方法 简单的结论就是:成员函数在多态是,编译看左边,运行看右边。 在多态中成员变量的特点 无论编译和运行,都参考左边(引用型变量所属的类) 在多态中静态成员函数的特点 无论编译和运行都参考左边 方法的覆盖 当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子类新写的方法覆盖父类的方法,称为覆盖。(注意返回值类型也必须相同,否则编译出错。)如果方法参数表不同,则成重载。
特点:
1.对于方法的访问限制修饰词,子类方法要比父类的访问权限更高。
父类为public,那么子类为private则出现错误。
2.子类抛出的异常应该是父类抛出的异常或其子类。