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

 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了

未完待续~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值