美文网首页
面向对象

面向对象

作者: 知止睿 | 来源:发表于2018-11-27 23:05 被阅读0次

1.面向对象(D10)

1.

car c=new car();

对象也是引用型变量,存储在堆内存中,c是引用型变量,存储的是car的内存地址,c:car类型的对象

2.

类是对一类事物的抽象描述,是对象的模板,对象用于表示现实中该类事物的个体。

3.

成员变量有默认初始值

    null,0,  0.0

  局部变量没有默认初始值,不赋值不能使用

4.

成员变量跟随对象进入堆内存存储

    局部变量跟随方法进入栈存储

5.

面向对象有三大特征

封装,继承,多态

6.

private属于成员修饰符,不能修饰局部变量

加上private关键字,只能在本类中初始化,外部类无法直接访问,因此可以通过本类中设计set()函数进行方法赋值,set()函数内可以加入条件判断

7.

类中的属性都私有化,但是需要提供get()和set()函数,进行间接访问

8.

方法中,有this.的访问的是成员变量,哪个对象调用包含this,this就表示哪个对象

9.

java中不允许多继承,但可以多重继承(多层继承)

10.

用子类的对象调用成员变量,子类自己有就使用自己的,子类没有就调用父类的(就近原则)

11.

子类出现和父类一模一样的方法时,子类对父类的方法进行重写(override)

12.

子类方法覆盖父类方法,必须保证子类的权限大于等于父类的权限

13.

四大权限

public   protected   default   private

14.

抽象类,不能实例化对象,因为抽象方法没有主体,无法运行,抽象方法一定要定义在抽象类中

public abstract class develop{

    public abstract void work();//不写大括号

}

定义类继承抽象方法,将抽象方法进行重写,创建子类对象

抽象类的作用,保证继承的体系的完整性,强制子类重写抽象的方法,

abstract无法和private, final static一起使用,产生矛盾 

15.

抽象类可以没有抽象方法,意义在于:不会让其他人直接创建该类对象,作为中间层



1.接口(D11)

1.接口只描述应该具备的方法,并没有具体实现,具体实现由接口的实现类来完成(相当于接口的子类),定义与实现分离

2.类与接口的关系为实现关系,使用implements关键字,定义类,实现接口,重写接口中的抽象方法,类实现接口,可以理解为继承

                      类名                        实现            接口名

public class MyInterfaceImpl implements MyInterface{

}

没有变量,都是常量

常量定义:public static final  数据类型  变量名=10;SF

成员方法定义:public abstract 返回值 方法名字(参数列表);A

3.static可以被类名或者接口名+(点)直接调用

4.子类(实现类)必须覆盖接口所有的抽象方法之后,才能实例化,否则,子类就是一个抽象类

5.接口的意义:解决了多继承的弊端,通过多实现完成

6.多实现消除了多继承的安全隐患,因为接口中的方法都是抽象的没有主体,需要依赖类的重写才能实现  

7.抽象类是体系应该有的功能,接口是体系特殊功能

eg     犬            行为(吼叫,吃饭)

        缉毒犬      行为(吼叫,吃饭)缉毒(接口定义)


1.多态(D11-12)

1.类person,students

students extends person{}

public static void(String [] args){

    students s =new student();

    person p=new student();

    p.方法() 运行的是子类的重写方法

}

接口   变量名=new 实现类();

父类   变量名=new 子类();

最终多态体现为,父类的引用变量指向子类对象,同样适用于抽象类

在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法

多态的三种调用方法,普通类,抽象类,接口

1.public class Fu{

class Zi extends Fu{}

2.public abstact class Fu{}

class Zi extends Fu{}

3.pulic interface Fu{}

class Zi implements Fu{}

2.成员特点

1.成员变量(编译,运行看父类)

编译时,参考父类中有没有这个变量,如果有,编译成功,没有,编译失败。

运行时,运行的是父类中的方法值。

2.成员方法(编译看父类,运行看子类)

编译时,参考父类中有没有这个方法,如果有,编译成功,没有,编译失败。

运行时,运行的是子类重写的方法,如果子类没有重写,运行父类的方法。

PS.静态时(编译,运行看父类)

成员变量:编译运行全是父类

成员方法:编译时,参考父类中有没有这个方法,如果有,编译成功,没有,编译失败。

                  运行时,运行的是父类中的方法值。

3.instanceof关键字(对于有继承关系或者实现关系的类)

1.person p=new student();

   person p=new teacher();

boolean b=p instanceof teacher;      //p是否是teacher类型的对象变量

4.向下转型

原因:多态可以调用子类和父类的公有方法,但是无法调用子类的特有方法,所以使用向下转型

1父类类型强制转换为子类类型,好处,调用子类中特有的功能

Fu f=new Zi();

Zi z=(Zi)f ;


1.构造方法(D12)

main方法先入栈,开始执行,在堆内存中建立new person区域,赋默认值,new person调用构造方法,构造方法入栈,将参数“张三”,20传递给构造器,this语句对堆内存初始化,之后将内存地址0x001传递给对象变量P

2.this在构造器之间的调用

public person(){    //无参构造器

    this("张三",19);    //调用有参数的构造器,该语句需要写在构造器的第一行

}

public person(String name.int age){

    this.name=name;

    this.age=age;

}

3.super关键字

1.super

子类中使用super()调用父类的构造方法,将super()直接看做函数,有参super()直接将参数传递给父类的构造器,对变量进行赋值。

super()调用父类的无参构造器

super(xxx)调用父类的有参构造器

2.D12-13

new 类的时候,自动调用构造器

子类有一个默认添加的构造方法,子类构造方法的第一行有一个隐式的代码suer(),

public student(){

super(); //调用父类的无参数构造方法

}

3.super代表了父类在内存中的位置

4.Attention

public class person{

    public person(int a){

    }

}

public class students extends person{    //报错,父类没有无参构造器

    public student{

        super();

    }

}


D13

1.final修饰类,除了该类不能被继承之外,其余用法都相同。 

public final class student{

}

2.final修饰方法,不能被重写。

public final void show(){

}

3.final修饰成员变量,固定的不是内存的默认值,固定的是手动的赋值。

    final int age=1             final int age=0//0是赋值,和内存默认值意义不同

4.final修饰引用形变量,变量的内存地址将终身不变

final Zi z=new Zi();

z=0x4de,终身不变

5.成员变量的赋值,定义的时候直接赋值,或者使用构造方法

final int age=1 ;

或者

final int age;

public person(int age){

this.age=age;

}

成员变量需要在创建对象前赋值,否则报错,即只能直接赋值,或者构造器赋值,不能使用set方法赋值,因为构造器赋值在new对象的时候已经完成

6.Static修饰共享属性,减少浪费

public class person{

    private String name;

 static String className;

}

person p1=new person();

person p2=new person();

p1.className="基础班";

System.out.println(p2.className)//同样为基础班

7.被static修饰的成员可以被类名直接调用

System.out.println(person.className)

8.类进入到方法区,先把静态属性或者方法加载到静态区,作为共享

类进入方法区后先加载自己的静态成员到静态区,静态属于类,即main属于test,className属于person,静态成员有默认值,null,开始执行后JVM将main复制一份压栈执行,JVM到静态区,找到属于person类的静态属性,className,打印出null,静态优先于非静态存在。

9.static的注意事项

在静态中不能调用非静态

static优先于非静态存在于内存中 ,所以不能使用this/super

10.static的应用场景

成员变量:是否有共性属性

成员方法:跟着变量走,如果调用了静态变量,则方法就加static,调用了非静态变量,方法不能加static

                  没有使用成员变量,就使用static,否则需要浪费一个对象才能调用。因为不加static的调用时需要new对象,加static的方法直接可以用

                  类名.方法名调用

11.定义静态常量

Public static final String COMPANY-NAME="itcast";     变量名大写,多个单词用下划线连接

12.匿名对象

只能使用一次,可以作为方法的参数进行传递,减少代码量

~public void method (person p);    method (new person);

~public person method (){

    return  new person();

}

13.权限修饰符

int i=1;        即默认权限(default),仅在本包下可以使用,如果2类继承1类,两者不在一个包内,且导入1的包,无法使用,因为不在一个包下。

protected权限:本包中的类和其他包的子类调用,且只能是子类的里面,直接调用。

public class A{

    protected void abc(){

        sop("abc");

    }

}

public class B extends A{

    abc();

}

14.代码块

静态代码块,无论new几次,只执行一次    static{}

构造代码块,new一次,执行一次        {}

构造方法,new一次,执行一次        


1.类作为参数( D14 )

public person{

    public void show{

        sop("show方法执行");

}

}

public static void main(String args [] ){

    person p=new person();

    method(p);

    public void method(person p){

        p.show();

}

}

2.抽象类作为参数

体现多态调用的扩展性

public abstract class Animal {

    public abstaract void ear();

}

pubic class cat extends Animal {

sop("吃鱼");

}

public static void main(String args [] ){

    cat c=new cat();

    operatorAnimal(c);

    public static void operatorAnimal(Animal a ) {//由于是抽象类,没有对象,只能调用Animal的子类对象

        a.eat();    //execute super class Animal's function

    }  

}

3.抽象类作为返回值

public class getAnimal(){

    public Animal getAnimal(){

    if(i==0)

         return new cat();    //返回cat,类型是Animal 

    return new dog(); 

}

}

public static void main(String args [] ){

    getAnimal g=new getAnimal();

    Animal a = g.getAnimal(0);    //需要用父类(或者接口)接收,不能写死

    Animal a = g.getAnimal(1); 

}

相关文章

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • 总结.Net基础知识——献给即将入坑的同行们(一期)

    什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗...

  • 面向对象基础

    面向对象编程包括: 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程实现(OOP) 面向对象思想...

  • 20-OOP类与对象

    面向对象 Object Oriented 学习面向对象:XXOO 面向对象的学习: 面向过程和面向对象的区别: 面...

  • JavaScript面向对象核心知识归纳

    面向对象 概念 面向对象就是使用对象。面向对象开发就是使用对象开发。 面向过程就是用过程的方式进行开发。面向对象是...

  • 面向对象(未完成)

    面向对象 标签(空格分隔): 面向对象 第一章:面向对象(上) 什么叫面向对象 面向过程、面向对象、两者区别 构造...

  • 面向对象:创建对象&继承

    博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...

  • 面向对象

    了解什么是面向对象 首先,我们学习面向对象,要了解什么是面向对象,面向对象的重要概念:类,对象。 面向对象提出的这...

  • 面向对象的三大基本特征和五大设计原则

    1、面向对象概念 1.1、理解面向对象 面向对象是相对面向过程而言; 面向对象和面向过程都是一种思想; 面向过程:...

网友评论

      本文标题:面向对象

      本文链接:https://www.haomeiwen.com/subject/bjowqqtx.html