您的位置:首页 > 编程语言 > Java开发

DAY-1 java基础-java面向对象

2014-08-16 19:24 260 查看
java中万事万物皆对象 面向对象的三大特性: 封装、继承、多态

对象和类之间的关系

类是众多对象的一个抽象描述,类中定义了一类对象所具有的静态(属性)和动态属性(方法)

类可以看成一类对象的模板,对象可以看成类的具体实例

设计类时合适的方法应该出现在合适类中

面向对象的程序设计中实际上进行的是创建新的数据类型,但事实上所有的面向对象程序设计语言中都是使用class这个关键字来表示数据类型

打个比方:

所有的类描述了具有相同特性(属性)和行为(方法)的对象集合,而浮点数数字也是同样具有相同的特性和行为的集合,二者的差异在于,类是通过程序员定义来
处理问题,而不是用来表示机器中的存储单元的数据类型 所以类其实也是一个数据类型。

类和类之间的关系

关联关系、实现关系、聚合 、组合

Java用三个关键字在类的内部设定边界 public private protected 访问级别如下表格

类内部

package内

子类

其他

public

允许

允许

允许

允许

protected

允许

允许

允许

不允许

default

允许

允许

不允许

不允许

private

允许

不允许

不允许

不允许

继承

类的继承知识点

(1)java不支持多重继承,也就是说子类至多只能有一个父类

(2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法

(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承

(4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。

(5)继承关系是传递的。若类C继承类B,类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。

多态

父类的引用类型指向子类的对象

父类:

public class Person {
private String name="person";
int age;
String sex;
{
System.out.println("person 初始化快  name:"+name);
}

static{
System.out.println("person 静态初始化快");
}

public Person(int i) {
System.out.println("person++");
}

public void ShowName(){
System.out.println("person>>>"+name);
}
}


子类:

public class Teacher extends Person {
private String name = "teacher";
private static int age = 0;

{
System.out.println(name+">>>>teacher");
System.out.println("Teacher 初始化块");
}
static {
age = 1;
System.out.println("Teacher static初始化块");
}

public Teacher() {
//        super(0);
this(1);
System.out.println("teacher");
}
public Teacher(int age) {
super(0);
this.age = super.age;
this.age = age;
System.out.println("teacher1");
}

private int dep;

public void setDep(int dep) {
this.dep = dep;
}
public int getDep() {
return dep;
}
//    public void ShowName(){
//        System.out.println("teacher'name is "+name);
//    }
public static void main(String[] args) {
/**
* 1、父类的静态初始化快
* 2、初始化子类的静态初始化块
* 3、父类的初始化快
* 4、父类的构造器
* 5、子类的初始化块
* 6、子类的构造器
*
* 父类的方法  访问的是父类的属性   子类的方法  访问的是子类的属性
*/
Person p = new Teacher();
p.ShowName();
//        p.
//        p=new Person();
//        p.ShowName();
//        Teacher T = new Teacher();
//        T.name="";
}
}


子类父类的初始化顺序:

* 1、父类的静态初始化快

* 2、初始化子类的静态初始化块

* 3、父类的初始化快

* 4、父类的构造器

* 5、子类的初始化块

* 6、子类的构造器

另外需要记住一点

父类的方法 访问的是父类的属性 子类的方法 访问的是子类的属性

上面的代码中 子类父类都有Name属性 和showName 方法 如果new Teacheer().showName(); 如果调用的是子类的ShowName 方面 打印的是 teacher 如果屏蔽掉子类中的showName 方法 打印出来的是person了

未完待续~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: