java中面向对象的一些知识点

类和对象关系:
什么是类:一组事物的共有的特征和属性的描述 是对象实现的具体内容的抽象,只包含对象的结构,不包含具体的数组
什么是对象:实实在在存在的物体
类是创建对象的模板
对象是类的实例化

如何创建类:
public class 类名{
属性:成员变量
数据类型 属性名
行为:方法
对象需要做的一些内容
修饰符 返回值类型 方法名(参数列表){}
}
使用类:
创建对象
类名 对象名=new 类名();
对象名.属性名=值:属性进行赋值
对象名.属性名:获取属性
对象名.方法名()
对象名.方法名(参数)
返回值类型 变量名=对象名.方法名()

构造方法:
        语法格式
            修饰符  方法名(参数列表){}
        作用:
           创建对象使用
           给类中的属性进行赋值
        特点:
            1方法名和类名一致
            2不用定义返回值类型
            3不需要return 语句
            4.如果一个类中不写构造方法,提供一个默认的无参数的构造方法

抽象类:
抽象类必须使用abstract class声明 一个抽象类中可以没有抽象方法。抽象方法必须写在抽象类或者接口中。
格式: abstract class 类名{ // 抽象类 }

抽象方法:
只声明而未实现的方法称为抽象方法(未实现指的是:没有“{}”方法体),抽象方法必须使用abstract关 键字声明。 
格式:    abstract class 类名{  // 抽象类        public abstract void 方法名() ;    // 抽象方法,只声明而未实现    }


不能被实例化:
在抽象类的使用中有几个原则:    · 抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。  
一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全 部抽象方法。


常见问题:
1、抽象类能否使用final声明?  
不能,因为final属修饰的类是不能有子类的 , 而抽象类必须有子类才有意义,所以不能。
2、抽象类能否有构造方法?    
能有构造方法,而且子类对象实例化的时候的流程与普通类的继承是一样的,都是要先调用父类中的 构造方法(默认是无参的),之后再调用子类自己的构造方法。


 抽象类和普通类的区别: 
 1、抽象类必须用public或procted 修饰(如果为private修饰,那么子类则无法继承,也就无法实现其 抽象方法)。默认缺省为 public 
 2、抽象类不可以使用new关键字创建对象, 但是在子类创建对象时, 抽象父类也会被JVM实例化。
 3、如果一个子类继承抽象类,那么必须实现其所有的抽象方法。如果有未实现的抽象方法,那么子类也必 须定义为 abstract类

static:
static表示“静态”的意思,可以用来修饰成员变量和成员方法(后续还会学习 静态代码块 和 静态内部类)。
static的主要作用在于创建独立于具体对象的域变量或者方法
简单理解:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
并且不会因为对象的多次创建 而在内存中建立多份数据。

    重点:
           1.  静态成员 在类加载时加载并初始化。
           2.  无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份( 可以理解为所有对象公用 )
           3.  在访问时: 静态不能访问非静态 , 非静态可以访问静态 !
    特点:
            1,随着类的加载而加载
            2,所有对象共享的
            3,直接使用类名调用
    语法格式:
          static 数据类型 属性名;
          public static void 方法名(){
          }
     使用:
            static:所有对象共享的属性
            在本类中:
                   1.属性名
                   2.类名.属性名
                   3.对象名.属性名
            其他类中:
                    1类名.属性名
                    2对象名.属性名

匿名对象:
没有名字的对象
new 类名():
属性或者方法只进行一次调用,使用一次,对象就消失

this:
指向当前对象 this在那个类中指向的就是那个类
语法格式:
属性 this.属性名
方法:this.方法名
如何使用this关键字:
全局变量和局部变量重名的时候,this.属性名区分全局变量名和局部变量
构造方法内
pubic class 类名{
private String name;
private int age;
public 类名(String name,int age){
this.name=name;//等号左边:类中的属性 等号右边:方法的参数名
}
this():调用当前类中的构造方法
this(参数):调用的是当前类中有参数的构造方法
this():最多使用在构造方法内。它必须方法的第一行位置
super:
调用父类的全局变量
父类的变量和子类的变量重名的时候,super.属性名调用父类中的全局变量
super():调用的父类中无参数的构造
super(参数):调用的父类中有参数的构造方法
super()最多使用在构造方法,方法内的第一行位置

java面向对象三大特性:
封装:
隐藏对象的功能实现的细节和字段
private 数据类型 属性名;
特点:
只能在当前类中访问
如果想在其他类中访问
public void set属性名(参数数据类型 参数名){
return 属性名;
}
public 返回值 get属性名(){
return 属性名;
}

继承:
语法格式:
class 子类 extends 父类{}
特点:
1子类可以继承父类中所有的属性和方法,不包括private修饰的
2.java支持单继承
3.子类除了继承父类的所有的属性和方法之外,可以扩展自己的属性和方法

多态:
一种事物(对象)的多种形态
对象的多态性,从概念上非常好理解,在类中有子类和父类之分,子类就是父类的一种形态 ,对象多态性 就从此而来。
ps: 方法的重载 和 重写 也是多态的一种, 不过是方法的多态(相同方法名的多种形态)。
重载: 一个类中方法的多态性体现 重写: 子父类中方法的多态性体现

多态的体现
类似于基本数据类型的转换:
· 向上转型:将子类实例变为父类实例 |- 格式:父类 父类对象 = 子类实例 ;
· 向下转型:将父类实例变为子类实例 |- 格式:子类 子类对象 = (子类)父类实例

重点:
1继承 2方法重写3类型转换:

       向上类型转换(自动类型转换)
         父类  对象名=new 子类()  子类对象向父类对象转换
       向下类型转换
         子类  对象名=(子类)父类的对象名
           instanceOf:两个地下之间判断
            A instanceOf B:
            A对象是否由B类创建出来
    方法的重载和重写:
    重载:
            当前类的方法不能满足需求
            当前类中个
    语法格式:
            方法名必须相同
            修饰符和返回值类型无关
            参数列表:
                    参数个不同,数据类型可以相同或者不同
                    参数个数相同:数据类型不同,顺序可以相同也可以不同
     重写:
         继承
         语法格式:
                方法名 返回值类型 参数列表和父类的方法保持一致
                子类的修饰符要比父类的修饰符大

访问修饰符的权限

                    类的内部      同一个包中          子类   任何类        
   private           是              否               否       否
   protected         是              是               是       否
   default           是              是               否       否
   public            是              是               是       是

接口:
如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接口。
定义格式: interface 接口名称{ 全局常量 ; 抽象方法 ; }

     面向接口编程思想
     这种思想是接口是定义(规范,约束)与实现(名实分离的原则)的分离。
     优点:     1、  降低程序的耦合性    2、  易于程序的扩展    3、  有利于程序的维护


    因为接口本身都是由全局常量和抽象方法组成 , 所以接口中的成员定义可以简写:    
    1、全局常量编写时, 可以省略public static final 关键字,
         例如:        public static final String INFO = "内容" ;        
         简写后:        String INFO = "内容" ;    
    2、抽象方法编写时, 可以省略 public abstract  关键字,
         例如:        public abstract void print() ;       
         简写后:        void print() ;

   接口的实现 implements
   接口可以多实现: 格式:    class 子类 implements 父接口1,父接口2...{        }    
   以上的代码称为接口的实现。那么如果一个类即要实现接口,又要继承抽象类的话,则按照以下的格式编写  
   即可:    class 子类 extends 父类 implements 父接口1,父接口2...{        }

   接口的继承
   接口因为都是抽象部分, 不存在具体的实现, 所以允许多继承,例如:    interface C extends A,B{        }
    

    不关心内部数据实现,只需要用实现的方法
    语法格式:
    修饰符  inteface 接口名{
           常量:static final 数据类型  常量名-
           方法:
                    抽象方法
                    jdk1.8 static default
    }

    inteface 接口名{}
    class Student implements 接口名{
        重写接口中的抽象方法
    }

    注意事项:
        1没有构造方法
        2接口之间只能继承接口(多继承),不能继承类
        3接口的属性全是常量 public static final
        4接口中可以由抽象方法  public abstract 返回值类型  方法名()
        5接口中可以实现多个接口

接口和抽象类的区别:
1、抽象类要被子类继承,接口要被类实现。
2、接口只能声明抽象方法,抽象类中可以声明抽象方法,也可以写非抽象方法。
3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
4、抽象类使用继承来使用, 无法多继承。 接口使用实现来使用, 可以多实现
5、抽象类中可以包含static方法 ,但是接口中不允许(静态方法不能被子类重写,因此接口中不能声明 静态方法)
6、接口不能有构造方法,但是抽象类可以有

final:最终的 最后的
final:变量:常量  final 数据类型 变量名=值
fina类:不能被继承   final class 类名{}
final方法:不能被重写  public final 返回值类型  方法名(){}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值