java笔记

JAVA继承

继承的的概念:
  • 继承是一种类与类之间的关系
  • 使用已存在的类的定义作为基础建立新类
  • 作为基础的类一般称为父类(基类),创建的新类称为子类(派生类)
  • 新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性的继承父类
类的继承格式:
public class 父类(){

}
public class 子类(){

}
继承的优点:

1、提高了代码的复用性

2、提高了代码的维护性

3、建立了类与类之间的关系,继承是多态的前提。

继承缺点:

1、在一定程度上,造成类与类之间的强关联,即所谓的高耦合。

2、父类功能的改变对子类也会造成影响。

super 与this 关键字:
  • super关键字:
    我们可以通过super关键字来是新啊对父类成员的访问,用来引用当前的对象的父类。

  • this关键字:
    指向自己的引用。

   public class Animal
    {
    	void eat()
    	{
    		System.out.println("animal: eat");
    	}	
    }
    
   public class Dog extends Animal
    {
    	void eat()
    	{
    		System.out.println("dog :eat")
    	}
    	void eatTest()
    	{
    		super.eat();   /// 调用父类的方法
    		this.eat();    //调用自己的方法
    	}
    }

public class Test
{
	public static void main(String[] args)
	{
	Animal  a=new Animal();
	a.eat()
	Dog d = new Dog();
	d.eatTest();
	}
}
输出结果:
animal :eat
dog : eat
animal : eat
方法重写:

方法重写出现在有继承关系的子类中,以下几个要素都要与父类继承的方法相同

  • 返回值类型
  • 方法名
  • 参数类型、顺序、个数
方法重载:

同一个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载(method overloading)。

参数列表又叫参数签名,包括参数的类型、参数的个数、参数的顺序,只要有一个不同就叫做参数列表不同。

访问修饰符的分类及使用:
访问修饰符本类同包子类其他
privateyesnonono
默认noyesnono
protectedyesyesyesyes
publicyesyesyesyes

JAVA多态

多态时同一种行为具有多个不同的表现形式或形态的能力。

多态存在的三个必要条件:
  • 继承
  • 重写
  • 父类引用指向子类对象
实例:
public class Animal {
    private String name;
    private int month;
    
    public Animal(){}
    public Animal(String name, int month){
        this.setName(name);
        this.setMonth(month);
    }
    //此处省略getter/setter···
    public void eat(){
        System.out.println("动物都有吃东西的能力")
    }
}

//Cat类
public class Cat extends Animal{
   private double weight;
   
   public Cat(){}
      public Cat(String name, int month, double weight){
          super(name,month);
          this.setWeight(weight);
      }
      //此处省略 getter/setter···
      public void run(){
          System.out.println("小猫快乐的奔跑")
      }
      @Override
      public void eat(){
          Sysout.out.println("小猫吃鱼")
      }
}

//Dog类
public class Dog extends Animal{
    private String sex;

    public Dog(){}
    public Dog(String name,int month,String sex){
        super.setName(name);
        super.setMonth(month);
        this.setSex(sex);
    }
    //此处省略getter/setter···
    public void sleep(){
        System.out.println("小狗有午睡的习惯")
    }
    @Override
    public void eat(){
        System.out.println("小狗吃骨头")
    }
}
向上转型:

向上转型即父类引用指向子类实例。

public class Test{
   public static void main(String[] args){
       Animal a1 = new Animal();
       //向上转型、隐式转型、自动转型
       Animal a2 = new Cat();
       Animal a3 = new Dog();
       a1.eat();//动物都有吃东西的能力
       a2.eat();//小猫吃鱼
       a3.eat();//小狗吃骨头
   }
}
向下转型:
Cat temp = (Cat) animal;
运算符:

instanceof 运算符

//用于判断 obj 是否是 Classname 的实例或者是派生类实例
boolean flag = obj instanceof Classname;

单例设计模式:

单例模式的定义:指一个类只有一个实例,且该类能自行创建这是实例的一种模式。

单例模式设计要点:

1、单例类只有一个实例对象
2、该单例对象必须由单例类自行创建
3、单例类对外提供一个访问该单例的全局访问点

单例模式代码实现:

1、只提供私有的构造方法
2、含有一个该类的静态私有对象
3、提供一个静态的公有的应用于创建、获取静态私有对象

饿汉模式:
//饿汉模式:创建对象实例的时候直接初始化

public class HungrySingletion{
     //1、创建类中私有构造方法
     public HungrySingletion(){}
     //2、创建该类型的私有静态实例
     private static final HungrySingletion instance = new HUngrySingletion()
     //3、创建公有静态方法返回静态实例对象
     public static HungrySingletion getInstance(){
        return instance;
     }
}
懒汉模式:
/**
*懒汉模式:类内实例对象创建时并不直接初始化,
*          知道第一次调用get方法,才完成初始化
*/
public class LazySingletion{
     //1、创建类中私有构造方法
     public LazySingletion(){}
     //2、创建该类型的私有静态实例
     private static LazySingletion instance = null;
     //3、创建公有静态方法返回静态实例对象
     public static LazySingletion getInstance(){
       if (instance == null){
           instance = new LazySingletion();
       }
       return instance;
     }
}

Java 接口

接口类相似于类,但接口成员没有执行体,它只是方法、属性、事件、和索引符的组合而已。接口不能被实例化,接口没有构造方法,没有字段,在应用的程序中,接口就是一种规范,它封装了可以被多个类继承的公共部分。

Java为什么需要接口

1、通过接口实现多继承
2、用于实现耦合
如下图所示,一个类扩展了另一个类,一个接口扩展了另一个接口,一个类实 现了一个接口。
在这里插入图片描述

接口的用法:
interface Printer{                                                                //打印机的接口
	void print();                                                        //打印机的打印方法
}

电脑来了

class  Computer implements Printer{                                           //computer连接了Printer的方法
	@override
	public void print(){
		System.out.println("我是电脑");                                        //把msg的方法打印出来
	}
}

手机来了

class SmartPhone implements Printer{                                   //手机连接了打印机
	@override
	public void print(){
		System.out.println("我是智能手机");                           //手机的println()方法
	}
}


Java 8接口特性:

Java 8以前的接口只能有抽象方法,不能有方法体
Java 8开始可以有方法体,但是只能是默认的方法体和静态方法

Java 抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

抽象方法:
  • 使用abstract修饰的方法我们称之为抽象方法。
  • 抽象方法不含有方法体
  • 含有抽象方法的类一定是抽象类,抽象类不一定有抽象方法
  • abstract关键字只能用于普通方法,不能用于 static 方法或者构造方法中
public abstract class Animal{
    public abstract void eat();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值