博主为初学者 只为记录每天学习的点点滴滴内容有很大的局限性,希望谅解
所谓多态:
一个引用(类型)指向父类的指针用来调用不同子类实现的方法
优点:所有继承父类的子类都可以由父类的实例化统一访问。若子类无父类对应方法直接调用父类方法。
Java允许父类的引用变量引用它子类的实例(对象)某些情况下子类也可以转化为父类(有一定的条件)
在上面程序中体现了多态的思想抽象类:在父类设置方法不确定的情况下,不需要做出方法体。在前面加入abstract关键词具有抽象方法的类叫做抽象类,class Demo{}前面也应该加入abstract关键词当一个类继承的父类是抽象类的话 一定要在子类中去实现父类中所有的抽象方法——方法的重写抽象类一定不可被实例化,无论抽象类中有多少抽象的方法。抽象类中可以没有抽象的方法(可以不具有包含abstract的方法)抽象类只能通过子类的继承(extends)去实现抽象方法不能有主体 abstract void demo(){主体}; error
接口:接口不能实例化,接口中的所有方法都不能有主体(抽象类中可以有实现的方法但是接口中不可以)接口相当于更加抽象的类。一个类可以有多个接口 class Demo1 extends Demo{}只能单一继承 但是 class Demo implements Demo1,Demo2{};是允许的。接口存在的意义:子类只能单一的去继承父类(java中单一继承机制)故引入接口的概念一个接口一定不能被实例化。接口本身不能实现里面的方法,必须由implements接口名的类去实现接口里面的方法,接口中可以有变量
final关键词:中文:最后的最终的 可以修饰变量或者方法。“当不允许父类的某个方法(变量)被子类覆盖(override)的时候,在父类方法加入final修饰词即可”
所谓多态:
一个引用(类型)指向父类的指针用来调用不同子类实现的方法
优点:所有继承父类的子类都可以由父类的实例化统一访问。若子类无父类对应方法直接调用父类方法。
Java允许父类的引用变量引用它子类的实例(对象)某些情况下子类也可以转化为父类(有一定的条件)
public static void main(String [] args){
Animal an = new Cat();
/* an.cry();
an.eat(); //这里体现了多态的思想。
an = new Dog();
an.cry();
an.eat();
Cat cat = new Cat();
cat.cry();
Dog dog = new Dog();
dog.cry();*/
Master master = new Master();
master.feed(new Dog(), new Bone());
master.feed(new Cat(), new Fish());
}
}
class Animal{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private int age;
public void eat(){
}
public void cry(){
System.out.println ("不知道");
}
}
class Cat extends Animal{
public void cry(){
System.out.println("喵喵喵");
}
public void eat(){
System.out.println("小猫喜欢吃鱼");
}
}
class Dog extends Animal{
public void cry(){
System.out.println("汪汪汪");
}
public void eat(){
System.out.println("小狗喜欢吃骨头");
}
}
class Food{
String name;
public void showname(){
}
}
class Fish extends Food{
public void showname(){
System.out.println("fish");
}
}
class Bone extends Food{
public void showname(){
System.out.println("bone");
}
}
class Master{
public void feed(Animal an , Food f){
an.eat();
f.showname();
}
}
在上面程序中体现了多态的思想抽象类:在父类设置方法不确定的情况下,不需要做出方法体。在前面加入abstract关键词具有抽象方法的类叫做抽象类,class Demo{}前面也应该加入abstract关键词当一个类继承的父类是抽象类的话 一定要在子类中去实现父类中所有的抽象方法——方法的重写抽象类一定不可被实例化,无论抽象类中有多少抽象的方法。抽象类中可以没有抽象的方法(可以不具有包含abstract的方法)抽象类只能通过子类的继承(extends)去实现抽象方法不能有主体 abstract void demo(){主体}; error
public class Chou {//抽象类的必要性
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
abstract class Anima{//抽象类
String name;
int age;
abstract public void cry(); //抽象方法 抽象方法绝对不可以实现。
}
class Cat5 extends Anima{ //继承的抽象类
public void cry(){ //必须实现的抽象方法
}
}
接口:接口不能实例化,接口中的所有方法都不能有主体(抽象类中可以有实现的方法但是接口中不可以)接口相当于更加抽象的类。一个类可以有多个接口 class Demo1 extends Demo{}只能单一继承 但是 class Demo implements Demo1,Demo2{};是允许的。接口存在的意义:子类只能单一的去继承父类(java中单一继承机制)故引入接口的概念一个接口一定不能被实例化。接口本身不能实现里面的方法,必须由implements接口名的类去实现接口里面的方法,接口中可以有变量
public class jiekou{
public static void main(String []args){
Computer computer = new Computer(); //实例化对象
Camera camera = new Camera(); //实例化对象
Phone phone = new Phone(); //实例化对象
computer.usbUsb(camera); //电脑中的接口(方法与相机中相对接)
computer.usbUsb(phone);//电脑中的接口(方法与手机中的对接)
}
}
interface Aaa{
public void bbb();
}
interface Usb extends Aaa{ //设置接口 接口不能继承类 但是接口可以继承另一个接口
//被继承的接口中的方法也必须被实现
int a=0; //接口中可以有变量 不过变量必须被初始化
//但是变量能被private 和protected修饰
//接口中的变量本身是静态的 是final的(static)
//用 Usb.a 去访问
public void start (); //接口中两个方法 接口中不能有实现的方法
public void stop();
}
class Camera implements Usb{ //定义具有接口的类
public void bbb(){
//实现被继承aaa中的bbb方法
}
public void start() { //实现接口中的方法
System.out.println("我是相机 我开始工作了");
}
public void stop() { //实现接口中的方法
System.out.println("我是相机我停止工作了");
}
}
class Phone implements Usb{ //定义具有接口的类
public void bbb(){
//实现被继承的Aaa中的bbb方法
}
public void start(){
System.out.println("我是手机 我开始工作了");//实现接口中的方法
}
public void stop(){
System.out.println("我是手机我停止工作了");//实现接口中的方法 接口中的方法必须都实现
}
}
class Computer{ //创建一个类
public void usbUsb(Usb usb){ //创建一个和接口对接的方法
usb.start(); //运行接口中的方法
usb.stop();
}
}
//接口中可以有变量
final关键词:中文:最后的最终的 可以修饰变量或者方法。“当不允许父类的某个方法(变量)被子类覆盖(override)的时候,在父类方法加入final修饰词即可”
class Demo{
final public void sendMes(){
//此方法不可被修改或覆盖
}
}
final class Demo{
int a; //若不赋初始值 a为o 尽不要不赋予初始值
final float rate_1=3.1415926f; //final 定义后必须赋初始值
final public void sendMes(){
}
}
class Demo1 extends Demo{ //因为父类类型为final 故不能被继承
public Demo1(){
a++;
rate_1++; //因为父类变量为final 故不能被修改
}
public void sendMes(){ //因为父类方法为final故不能被覆盖 编译器报错
}
}